繁体   English   中英

在 ASP.Net Core 的 ExceptionFilterAttribute 中添加响应标头

[英]Adding a response header in an ExceptionFilterAttribute in ASP .Net Core

当发生异常时,我正在尝试向来自 .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,然后将其输出到响应标头中。 这不会在发生异常时触发,所以我需要另一种方法来尝试使用过滤器。

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

试试这个,

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

显式设置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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM