【发布时间】:2020-01-28 00:59:10
【问题描述】:
在 ASP.NET Core 2.2 MVC 应用程序中,我有一个视图,它向控制器发出 Ajax 请求,请求通过并到达满足条件的控制器,该条件应返回 NotFoundResult (404):
$.ajax({
type: "POST",
url: "/My/AjaxAction",
data: {
name: name
}
})
[HttpPost]
public async Task<IActionResult> AjaxAction(string name)
{
if (/* condition */)
{
return NotFound();
}
//....
}
在测试这个时,我得到一个 405 Method Not Allowed 响应而不是 404。我调试并验证我正在点击NotFound() 行。但是 EndpointMiddleware 正在将响应更改为 405,我不知道为什么:
信息:Microsoft.AspNetCore.Mvc.StatusCodeResult[1] 执行HttpStatusCodeResult,设置HTTP状态码404 信息:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2] 执行动作 MyProject.MyController.AjaxAction (MyProject) 在 2071.1794ms 信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[1] 执行端点'MyProject.MyController.AjaxAction(MyProject)' 信息:Microsoft.AspNetCore.Routing.EndpointMiddleware[0] 执行端点'405 HTTP Method Not Supported'
在应用程序中使用 POST 的其他 Ajax 操作仍然可以正常工作,只是这一个是问题所在。
更新:如果我不满足NotFound() 的条件,而是正常返回Ok(),那么它会返回应有的正确响应。改成405的只是404。
【问题讨论】:
-
如果没有“NotFound()”的作用,我们无能为力。我们只能说服务器发送了一个 HTTP 错误 405。
-
@Christopher ControllerBase.NotFound
-
您发送的 uri 是什么?它真的会击中那个动作吗?
-
@TMcKeown 是的,它触发了操作并按原样返回
NotFoundResult,然后 EndpointMiddleware 将其更改为 405。 -
这里不足以回答您的问题。这可能是由于某些自定义错误处理程序造成的,但我们没有代码可以判断是否是这种情况。
标签: c# ajax asp.net-core