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()