【发布时间】:2019-09-11 19:05:35
【问题描述】:
我在 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 访问网络服务器。 我错过了一些细节。该网站有常规控制器以及托管在同一应用程序中的 API 控制器。对于 api 控制器,我们使用 JWTToken 对于我们使用 cookie 的其他控制器。网站工作得很好。 Api 控制器的所有获取请求都可以正常工作,它们甚至可以正确地从数据库中获取数据(因此至少它不是数据库问题),但所有 api POST 返回 404。找不到 URL。
正如@Anton 所问,这里是发布请求之一
[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;
}
【问题讨论】:
-
你很可能会达到 500,然后如果你没有错误处理页面,它会给你一个 404。因为它发生在
POST我假设你正在尝试写一些东西到数据库。检查数据库是否正常工作。首先启用开发人员异常页面。 -
数据库应该可以正常工作,因为所有访问数据库的 get 请求都会正确返回数据。所以我认为它与数据库并没有真正的关系。我添加了广泛的日志记录,但甚至没有到达 API 控制器。
-
可能值得展示一个您想要执行的操作的示例。
-
是的,在我的问题中添加了一个发布请求,以便您查看代码。它甚至没有达到。
标签: asp.net-core asp.net-web-api http-post http-status-code-404