我在服务器中执行以下操作:
[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状态代码为500
。
部署后,IIS不再使用所描述的JSON,而是返回this famed error page。
以下web.config
包含customErrors
部分的详细信息:
<customErrors mode="Off" defaultRedirect="~/error.htm">
<error statusCode="404" redirect="~/errorhandling/pagenotfound" />
</customErrors>
我尝试将其转为On
,但都没有效果。
我应该在哪里更改以停止接收那个丑陋的错误页面而不是我的美丽JSON?
修改
我将状态代码更改为400
,现在我将文本Bad Request
作为回复,而不是JSON:
答案 0 :(得分:7)
来自this link:
解决了对web.config
的修改并添加以下属性:
<system.webServer>
...
<httpErrors existingResponse="PassThrough"></httpErrors>
...
</system.webServer>
另一个奇怪的微软故事。
答案 1 :(得分:2)
您正在使用服务器错误而不是客户端错误。根据{{3}}的5XX错误:
“服务器无法满足明显有效的请求。”
在这种情况下,您的服务器工作正常,客户端发送错误请求。请改用客户端错误(4XX)。
答案 2 :(得分:0)
如果您需要同时使用自定义错误页面,有时会返回httpErrors部分中定义的http状态的自定义数据,该怎么办:
- 在web.config中设置existingResponse="Auto"
(httpErrors部分,您定义自定义错误页面的位置);
- 在您的操作中设置TrySkipIisCustomErrors = true
(一个返回4xx状态和内容);
- 清除global.asax中的服务器错误(在Application_Error()
- Server.ClearError()
中)并重新设置状态代码(Reponse.StatusCode = ((HttpException)Server.GetLastError()).GetHttpCode()
)