如何在异常时设置 http header?

How can i set http header on exception?

我想在错误 500 页面上添加自定义 http header,我想在控制器中执行此操作 - 我就是想不通。

这是我试过的:

public virtual void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpException)
    {
        var statusCode = ((HttpException) filterContext.Exception).GetHttpCode();
        if (statusCode >= 500 && statusCode < 600)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Custom-Key", "error");
        }
    }
}

然而,它没有添加header,所以一定是有问题。

有什么想法吗?

谢谢

发生这种情况是因为您没有处理异常。我强烈建议您在 try catch 块中执行此操作(如果这样做,您将无法在 OnException 方法中捕获此异常)。

但是为了回答你的问题,你需要告诉上下文这个异常已被处理。您需要以下行:

filterContext.ExceptionHandled = true;

总计:

public virtual void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpException)
    {
        var statusCode = ((HttpException)filterContext.Exception).GetHttpCode();
        if (statusCode >= 500 && statusCode < 600)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Custom-Key", "error");
            filterContext.ExceptionHandled = true;
        }
    }
}