如何在 OnResultExecuted 中添加 header

How can I add a header in OnResultExecuted

我需要在回复中添加 header。

header 值基于响应 body。

当我尝试添加 header 时出现错误:'Headers are read-only, response has already started.'

public class SecurityFilter : ActionFilterAttribute
{
    public override async void OnActionExecuting(ActionExecutingContext context)
    {
        var body = await new StreamReader(context.HttpContext.Request.Body).ReadToEndAsync();
    }

    public override void OnResultExecuted(ResultExecutedContext context)
    {
        var objectResult = context.Result as ObjectResult;
        var resultValue = objectResult.Value;
        Console.WriteLine(resultValue);

        context.HttpContext.Response.Headers.Add("foo", "bar");

        base.OnResultExecuted(context);
    }
}

OnResultExecuted方法在操作结果执行后被调用。如果结果已经完成,响应头不能是set/modified。

您可以使用 OnActionExecuted 方法,该方法在操作执行之后、操作结果之前调用。或者使用在操作结果执行之前调用的 OnResultExecuting 方法。

这是一个您可以遵循的简单演示:

public class SecurityFilter : ActionFilterAttribute
{
    public override async void OnActionExecuting(ActionExecutingContext context)
    {
    }
    public override void OnActionExecuted(ActionExecutedContext context)
    {           
        var objectResult = context.Result as ObjectResult;
        var resultValue = objectResult.Value;
        Console.WriteLine(resultValue);
        context.HttpContext.Response.Headers.Add("foo", "bar");
        base.OnActionExecuted(context);
    }        
}