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>