ASP.NET MVC在发送状态为500的响应时显示错误页面
我在服务器中有以下操作:
[HttpPost] public JsonResult SearchContracts(SearchViewModel vm) { List 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状态代码为500
。
部署后,IIS将返回我这个着名的错误页面 ,而不是所描述的JSON。
这是web.config
,其中包含customErrors
部分的详细信息:
我试过把它变成On
但是都没有用。
我应该在哪里更改以停止接收那个丑陋的错误页面而不是我的美丽JSON?
编辑:
我将状态代码更改为400
,现在我将文本Bad Request
作为响应,而不是JSON:
从这个链接 :
解决了编辑web.config
并添加以下属性的问题:
... ...
另一个离奇的微软故事。
您正在使用服务器错误而不是客户端错误。 根据维基百科的5XX错误:
“服务器未能满足明显有效的请求。”
在这种情况下,您的服务器工作正常,客户端发送错误请求。 请改用客户端错误(4XX)。
如果您需要同时使用自定义错误页面,有时会返回httpErrors部分中定义的http状态的自定义数据,请执行以下操作: – 在web.config中设置existingResponse="Auto"
(httpErrors部分,您可以在其中定义自定义错误页面); – 在您的操作中设置TrySkipIisCustomErrors = true
(返回4xx状态和内容的一个); – 清除global.asax中的服务器错误(在Application_Error()
– Server.ClearError()
)并重新设置状态代码( Reponse.StatusCode = ((HttpException)Server.GetLastError()).GetHttpCode()
)