我正在使用ASP.NET MVC,而我的应用程序主要使用JSON查询。
如果服务器端出现问题,我会收到标准的“500 Internal Server Error”页面。那真的很好。但是我想在响应头中添加一个字段:Exception的消息。
我的想法是在控制器中添加此覆盖:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
filterContext.RequestContext.HttpContext.Response.AppendHeader("Exception", filterContext.Exception.Message);
filterContext.RequestContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
不幸的是,我没有在响应标题中获得新字段。
但是,如果在我的控制器方法上执行此操作,则可以:
try
{
}
catch (Exception ex)
{
Response.Headers.Add("Exception", ex.Message);
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return Content(ex.Message);
}
它有效,但它不是很整洁。我有办法轻松地做到这一点吗?谢谢!
答案 0 :(得分:1)
尝试在web.config中启用自定义错误:
<system.web>
<customErrors mode="On" />
</system.web>
这将呈现标准错误视图~/Views/Shared/Error.aspx
,您的自定义标头将附加到响应中。
您也可以使用filterContext.HttpContext.Response
代替filterContext.RequestContext.HttpContext.Response
。它指向同一个对象,只是它更有意义。