You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC不支持GET的接口收到GET请求,如何返回状态码避免错误记录?

最佳状态码选择:针对仅支持POST的MVC接口处理GET请求

我的ASP.NET MVC应用中,有一个标记了[HttpPost]的控制器方法,代码如下:

[HttpPost]
public ActionResult SaveChoiceSingle(int sessionId, int actionId, int itemNumber, string response)
{
    MultipleChoice.SaveSingleResponse(sessionId, actionId, itemNumber, response);

    return new JsonResult()
               {
                   Data = string.Empty
               };
}

视图中没有提供用户发送GET请求的入口,但ELMAH仍记录了针对该方法的GET请求错误,怀疑是浏览器扩展发起的这类请求。现在需要从以下状态码中选择最佳实践,避免被记录为应用/服务器错误:

  • 400 Bad Request
  • 404 Not Found
  • 405 Method Not Allowed

结论:选择405 Method Not Allowed(方法不允许)

原因如下:

  1. 语义精准:HTTP规范中,405状态码专门用于表示「请求使用的HTTP方法对目标资源不被允许」,完全匹配当前场景——接口存在,但仅接受POST方法,拒绝GET。
  2. 避免语义混淆:
    • 400用于表示请求格式、参数等不符合要求,和「方法不被允许」的场景不匹配;
    • 404表示资源不存在,但这个接口是真实存在的,只是不接受GET,用404属于错误的语义传递。
  3. 规范处理:返回405时,还可以在响应头中添加Allow: POST,明确告知发起者该接口允许的HTTP方法,同时可以配置ELMAH忽略405这类预期的状态码,避免不必要的错误记录。

内容的提问来源于stack exchange,提问作者kyletme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:20:11