我想向 500 Internal Server Error 页面添加标头

发布于 2024-10-12 10:09:34 字数 812 浏览 1 评论 0原文

我正在使用 ASP.NET MVC,并且我的应用程序主要使用 JSON 查询工作。

如果服务器端出现问题,我会看到标准的“500 内部服务器错误”页面。这实际上很好。但我想在响应标头中添加一个字段:异常消息。

我的想法是在控制器中添加此覆盖:

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);
}

它起作用,但不是很简洁。有什么方法可以轻松做到这一点吗?谢谢!

I'm using ASP.NET MVC, and my application works mostly using JSON queries.

If something goes wrong on the server-side, I get the standard "500 Internal Server Error" page. That's actually fine. But I'd like to add one more field in the response headers : the Exception's Message.

My idea was to add this override in the controller :

protected override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
        filterContext.RequestContext.HttpContext.Response.AppendHeader("Exception", filterContext.Exception.Message);
        filterContext.RequestContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }

Unfortunately, I don't get the new field in the response headers.

However, if do this on my controller's methods, it works:

try
{
}
catch (Exception ex)
{
    Response.Headers.Add("Exception", ex.Message);
    Response.StatusCode = (int)HttpStatusCode.InternalServerError;
    return Content(ex.Message);
}

It works, but it's not very neat. Is there a way I can do this easily? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2024-10-19 10:09:34

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

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

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

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

Try enabling custom errors in your web.config:

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

This will render the standard error view ~/Views/Shared/Error.aspx and your custom header will be appended to the response.

Also you could use filterContext.HttpContext.Response instead of filterContext.RequestContext.HttpContext.Response. It points to the same object, it's just that it makes a little more sense.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文