我想在500 Internal Server Error页面添加标题

时间:2011-01-14 08:45:56

标签: .net asp.net-mvc json asp.net-mvc-2 http-headers

我正在使用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);
}

它有效,但它不是很整洁。我有办法轻松地做到这一点吗?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试在web.config中启用自定义错误:

<system.web>
    <customErrors mode="On" />
</system.web>

这将呈现标准错误视图~/Views/Shared/Error.aspx,您的自定义标头将附加到响应中。

您也可以使用filterContext.HttpContext.Response代替filterContext.RequestContext.HttpContext.Response。它指向同一个对象,只是它更有意义。