首页 / 问答 / [.NET/.NET Core]ASP.NET Core 应用程序中如何向中间件中添加自定义的响应头呢? (67928317822)

[.NET/.NET Core]ASP.NET Core 应用程序中如何向中间件中添加自定义的响应头呢?

0

在ASP.NET Core Web API的应用程序中开发,自定义了一个中间件,现在需要在这个中间件中添加响应头信息,记录中间件处理数据的耗时,如下:

public class ProcessingTimeMiddleware  
{
    private readonly RequestDelegate _next;

    public ProcessingTimeMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        var watch = new Stopwatch();
        watch.Start();

        await _next(context);

        context.Response.Headers.Add("X-Processing-Time-Milliseconds", new[] { watch.ElapsedMilliseconds.ToString() });
    }
}

但是当程序运行后,会抛出如下的异常:

System.InvalidOperationException: Headers are readonly, reponse has already started.

那么,在ASP.NET Core 或者 ASP.NET Core Web API的应用程序中如何向在中间件中添加自定义的响应头呢?

回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    在ASP.NET Core或者ASP.NET Core Web API应用程序的间件中,在将内容写入响应主体后便不能再设置响应头,一旦将请求传递给下一个中间件,它将写入响应中,那么中间件就不能再设置响应头了。

    但是,我们可以使用回调方法来解决在ASP.NET Core中间件设置响应头的问题。

    Microsoft.AspNetCore.Http.HttpResponse定义了OnStarting()方法,它是在将响应头发送到客户端之前的被调用的委托。我们可以通过设置一个委托来实现自定义响应头信息的功能,如下:

    Rector的个人主页

    Rector

    05-14 回答

    • 0

      在ASP.NET Core或者ASP.NET Core Web API应用程序的间件中,你可以在context.Response.OnStarting()回调方法中添加响应头信息,如下:

      Rector的个人主页

      Rector

      05-14 回答

      我来回答