Asp.net core WebAPI(aspnetcore 2.2)的生产Web服务器不允许HTTPPost

Asp.net core WebAPI(aspnetcore 2.2)的生产Web服务器不允许HTTPPost,asp.net-core,asp.net-web-api,http-post,http-status-code-404,Asp.net Core,Asp.net Web Api,Http Post,Http Status Code 404,我在StartUp.ConfigureServices中有以下代码 services.AddCors(c=>c.AddPolicy(Konstants.CORS, d=> d.AllowAnyHeader() .AllowAnyMethod() .AllowAnyOrigin() .AllowCre

我在StartUp.ConfigureServices中有以下代码

  services.AddCors(c=>c.AddPolicy(Konstants.CORS, d=>
                    d.AllowAnyHeader()
                        .AllowAnyMethod()
                        .AllowAnyOrigin()
                        .AllowCredentials()
                    )
                );
在Configure方法中,我使用以下内容作为第一行:

app.UseCors(Konstants.CORS);
在web api的每个控制器上,我都使用以下命令

 [Route("api/[controller]")]
    [EnableCors(Konstants.CORS)]
    [ApiController, Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    [Consumes("application/json"), Produces("application/json")]
    public class EmployeesController : ApiBaseController
    {
在本地机器上,一切正常。但在远程机器(即生产机器)上,HTTPGet工作正常,但对于所有HTTPPOST,它返回404

这是我的web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\myapp.Web.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>

可能是什么问题?我可以通过plesk访问Web服务器。 我错过了一些细节。该网站在同一应用程序中有常规控制器和API控制器。对于api控制器,我们使用JWTToken;对于其他控制器,我们使用cookie。这个网站运行得很好。Api控制器让所有Get请求都能正常工作,它们甚至能正确地从数据库中获取数据(所以至少这不是DB问题),但所有Api POST返回404。找不到URL

正如@Anton所问的,这里是一个post请求

[HttpPost("Start")]
        public async Task<IActionResult> StartJob([FromBody] JobActivityModel model)
        {
            var ret = Empty;

            try
            {

                await Execute(new StartJob
                {
                    JobId = model.JobId,
                    PersonId = UserId,
                    At = model.CreatedAt
                });

                Log.Info($"{SoligoUser} has started the job");

                ret = Ok(new TimeClue
                {
                    Message = "job has been started",
                    IsSuccess = true,
                    Time = model.CreatedAt
                });
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                ret = Error(ex);
            }

            return ret;
        }
[HttpPost(“开始”)]
公共异步任务StartJob([FromBody]JobActivityModel模型)
{
var-ret=空;
尝试
{
等待执行(新启动作业)
{
JobId=model.JobId,
PersonId=UserId,
At=model.CreatedAt
});
Log.Info($“{SoligoUser}已启动作业”);
ret=正常(新时间线索
{
Message=“作业已启动”,
IsSuccess=true,
时间=model.CreatedAt
});
}
捕获(例外情况除外)
{
日志错误(ex);
ret=错误(ex);
}
返回ret;
}

您可以尝试以下内容

  • 安装并尝试
  • 进入服务器并尝试在服务器上运行。这将给出确切的错误
  • 检查您在服务器上尝试的post请求的标题
  • 仔细检查路径和有效载荷是否正确
  • 按照此操作,在iis中执行以下操作
  • 检查您是否正在向服务器发送正确的令牌

  • 在web搜索上浪费了很多时间之后,这就是解决方案:

    添加这一行解决了所有问题。Post现在工作正常,有时遇到的“介质不受支持”错误也已修复


    我希望有一天编译器会告诉你“嘿,你需要把这个放进去”

    你很有可能达到500,如果你没有错误处理页面,它会给你一个404。因为它发生在
    POST
    上,所以我假设您正在尝试向数据库写入一些内容。检查数据库是否正常工作。最重要的是启用开发人员异常页面。数据库应该可以正常工作,因为所有命中数据库的get请求都会正确返回数据。所以我假设它和数据库并没有什么关系。我已经添加了大量日志记录,但API控制器甚至还没有到达。这可能值得展示一个您尝试访问的操作的示例。是的,在我的问题中添加了一个post请求,以便您可以查看代码。它甚至没有达到这一点。我的提供商不允许访问RDP,他提到出于安全原因,这是不可能的。那么试试招摇过市吧。