获取ASP.net Core中的压缩响应长度

时间:2018-06-19 08:50:48

标签: asp.net asp.net-core middleware kestrel-http-server

我使用在Kestrel上运行的.net Core构建RESTful API。我刚刚使用" GzipCompressionProvider"启用了压缩功能。中间件如here所述。

我还使用了一个自定义记录器,它将所有请求/响应记录到DB,响应和请求长度如下所示:

string

Logger中间件的实现如下:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings[".apk"] = "application/vnd.android.package-archive";
    app.UseCors("AllowAll");
    app.UseResponseCompression();
    app.UseMiddleware<myMiddleware.LoggerMiddleware>();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });            
}

问题在于ResponseLength始终是预压缩长度。关于我需要改变什么的任何建议。我假设问题是只有在将响应刷新到客户端时才会压缩响应?我能在那之后添加记录器吗?

1 个答案:

答案 0 :(得分:1)

问题在这里:

app.UseResponseCompression();
app.UseMiddleware<myMiddleware.LoggerMiddleware>();

按照该顺序,响应压缩中间件将放置在中间件的前面。这意味着压缩中间件将在中间件之前获得请求,而处理响应在中间件之后之后

尝试在UseResponseCompression()之前添加中间件,您应该会看到压缩的内容。

参考:ASP.NET Core Middleware Pipeline