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(方法不允许)
原因如下:
- 语义精准:HTTP规范中,405状态码专门用于表示「请求使用的HTTP方法对目标资源不被允许」,完全匹配当前场景——接口存在,但仅接受POST方法,拒绝GET。
- 避免语义混淆:
- 400用于表示请求格式、参数等不符合要求,和「方法不被允许」的场景不匹配;
- 404表示资源不存在,但这个接口是真实存在的,只是不接受GET,用404属于错误的语义传递。
- 规范处理:返回405时,还可以在响应头中添加
Allow: POST,明确告知发起者该接口允许的HTTP方法,同时可以配置ELMAH忽略405这类预期的状态码,避免不必要的错误记录。
内容的提问来源于stack exchange,提问作者kyletme
相关产品推荐
相关产品推荐

