2017-07-08 46 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); 
} 

這將頭添加到實際的響應。