ASP.NET MVC showing error page on when sending responses with status 500
我在服务器中有以下动作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [HttpPost] public JsonResult SearchContracts(SearchViewModel vm) { List<string> errors; if (IsValid(vm, out errors)) { return Json(service.Search(vm), JsonRequestBehavior.AllowGet); } else { HttpContext.Response.StatusCode = 500; return Json(new { Errors = errors }, JsonRequestBehavior.AllowGet); } } |
在本地,效果很好。当请求无效时,它会返回一个带有错误的 JSON,并且响应中有一个用于 HTTP 状态代码的
部署后,IIS 将返回这个著名的错误页面,而不是描述的 JSON。
这里是
1 2 3 | <customErrors mode="Off" defaultRedirect="~/error.htm"> <error statusCode="404" redirect="~/errorhandling/pagenotfound" /> </customErrors> |
我试着把它改成
我应该在哪里更改以停止接收那个丑陋的错误页面而不是我的美丽 JSON?
编辑:
我将状态代码更改为
来自这个链接:
解决了编辑
1 2 3 4 5 | <system.webServer> ... <httpErrors existingResponse="PassThrough"></httpErrors> ... </system.webServer> |
另一个离奇的微软故事。
您使用的是服务器错误而不是客户端错误。根据 5XX 错误的维基百科:
"The server failed to fulfill an apparently valid request."
在这种情况下,您的服务器工作正常,客户端发送错误请求。请改用客户端错误 (4XX)。
如果您需要同时使用自定义错误页面并有时返回 httpErrors 部分中定义的 http 状态的自定义数据,请执行以下操作:
- 在 web.config 中设置
- 在您的操作中设置
- 清除 global.asax 中的服务器错误(在