2017-07-08 48 views
2

我试图在发生异常时从.Net核心Web API响应中添加头文件。在ASP .Net Core中的ExceptionFilterAttribute中添加响应头文件

我使用的是ExceptionFilterAttribute ...

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

出于某种原因,头不被发送到客户端。我猜这是与这个时候已经形成的反应有关,所以他们不能改变?

我有一个自定义的中间件,它向请求上下文添加一个关联id,然后将它输出到响应头中。这在发生异常时不会触发,所以我需要另一种方法来尝试使用过滤器。

我应该改变什么才能使它起作用?

回答

1

明确设置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); 
} 

这将头添加到实际的响应。