在 ASP .Net Core 的 ExceptionFilterAttribute 中添加响应 header
Adding a response header in an ExceptionFilterAttribute in ASP .Net Core
我正在尝试在发生异常时向来自 .Net 核心 Web API 的响应添加 header。
我正在使用 ExceptionFilterAttribute
...
public class ExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
context.HttpContext.Response.Headers.Add("CorrelationId", "12345");
base.OnException(context);
}
}
出于某种原因,header 没有发送到客户端。我猜这与此时已经形成的响应有关,因此无法更改?
我有一个自定义中间件,可以将关联 ID 添加到请求上下文,然后将其输出到响应 header 中。这不会在发生异常时触发,所以我需要另一种方法来尝试使用过滤器。
我应该更改什么才能使其正常工作?
明确设置 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);
}
这会将 header 添加到实际响应中。
试试这个,
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;
});
}
}
我正在尝试在发生异常时向来自 .Net 核心 Web API 的响应添加 header。
我正在使用 ExceptionFilterAttribute
...
public class ExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
context.HttpContext.Response.Headers.Add("CorrelationId", "12345");
base.OnException(context);
}
}
出于某种原因,header 没有发送到客户端。我猜这与此时已经形成的响应有关,因此无法更改?
我有一个自定义中间件,可以将关联 ID 添加到请求上下文,然后将其输出到响应 header 中。这不会在发生异常时触发,所以我需要另一种方法来尝试使用过滤器。
我应该更改什么才能使其正常工作?
明确设置 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);
}
这会将 header 添加到实际响应中。
试试这个,
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;
});
}
}