C# ASP.NET MVC在发送状态为500的响应时显示错误页面

C# ASP.NET MVC在发送状态为500的响应时显示错误页面,c#,asp.net-mvc,json,http,iis,C#,Asp.net Mvc,Json,Http,Iis,我在服务器中执行以下操作: [HttpPost] public JsonResult SearchContracts(SearchViewModel vm) { List<string> errors; if (IsValid(vm, out errors)) { return Json(service.Search(vm), JsonRequestBehavior.AllowGet); } else {

我在服务器中执行以下操作:

[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

编辑:

我将状态代码更改为
400
,现在我得到的是文本
Bad Request
,而不是JSON:


您使用的是服务器错误而不是客户端错误。根据5XX错误的定义:

“服务器未能完成明显有效的请求。”

在这种情况下,服务器工作正常,客户端发送错误的请求。改用客户端错误(4XX)

来自:

解决了编辑
web.config
并添加以下属性的问题:

<system.webServer>
    ...
    <httpErrors existingResponse="PassThrough"></httpErrors>
    ...
</system.webServer>

...
...

另一个奇怪的Microsoft故事。

如果您需要同时使用自定义错误页,有时还需要返回httpErrors部分中定义的http状态的自定义数据,那么下面是该怎么做: -在web.config中设置
existingResponse=“Auto”
(httpErrors部分,定义自定义错误页面的地方); -在操作中设置
tryskipiiscustomerors=true
(返回4xx状态和内容的操作);
-清除global.asax中的服务器错误(在
Application\u error()
-
server.clearror()
)并重新设置状态代码(
response.StatusCode=((HttpException)server.GetLastError()).GetHttpCode()

简单不要使用暗错误500向用户通知模型的无效状态,当服务器端出了问题,但服务器本身无法告诉您出了什么问题时,可以使用它。例如,当访问邮件服务器或类似的东西时,访问被拒绝。我编辑了它,但现在我得到了文本
错误请求
:(请查看我的问题更新。)
<system.webServer>
    ...
    <httpErrors existingResponse="PassThrough"></httpErrors>
    ...
</system.webServer>