如何在异常上设置http标头?

时间:2016-05-31 07:25:56

标签: c# .net asp.net-mvc http-headers

我想在错误500页面上添加自定义http标头,我想在控制器中执行此操作 - 我无法弄明白。

这就是我的尝试:

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

但是,它没有添加标题,所以必定是错误的。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您错过了处理异常的问题。我强烈建议您在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;
        }
    }
}