【问题标题】:Adding a response header in an ExceptionFilterAttribute in ASP .Net Core在 ASP .Net Core 的 ExceptionFilterAttribute 中添加响应标头
【发布时间】:2017-07-08 13:10:54
【问题描述】:

当异常发生时,我正在尝试向来自 .Net 核心 Web API 的响应添加标头。

我正在使用ExceptionFilterAttribute...

public class ExceptionFilter : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext context)
    {
        context.HttpContext.Response.Headers.Add("CorrelationId", "12345");
        base.OnException(context);
    }
}

由于某种原因,标头没有发送到客户端。我猜这与此时已经形成的响应有关,因此无法更改?

我有一个自定义中间件,可以将相关 ID 添加到请求上下文中,然后将其输出到响应标头中。发生异常时不会触发,因此我需要另一种方法,因此尝试使用过滤器。

我应该改变什么才能让它工作?

【问题讨论】:

    标签: c# asp.net-core http-headers middleware action-filter


    【解决方案1】:

    试试这个,

      public class ExceptionFilter : ExceptionFilterAttribute
        {
            public override void OnException(ExceptionContext context)
            {
                var correlationId = "12345";
    
                // DO OTHER STUFF
    
                context.HttpContext.Response.OnStarting(() =>
                {
                    context.HttpContext.Response.Headers.Add("CorrelationId", correlationId);
                    return Task.CompletedTask;
                });
            }
        }
    

    【讨论】:

      【解决方案2】:

      显式设置context.Result 以写入来自异常过滤器的输出:

      public override void OnException(ExceptionContext context)
      {
          context.HttpContext.Response.Headers.Add("CorrelationId", new string[] { "12345" });
      
          context.Result = new ObjectResult(null) { StatusCode = 500 };
          context.ExceptionHandled = true;
      
          base.OnException(context);
      }
      

      这会将标头添加到实际响应中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多