我使用在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始终是预压缩长度。关于我需要改变什么的任何建议。我假设问题是只有在将响应刷新到客户端时才会压缩响应?我能在那之后添加记录器吗?
答案 0 :(得分:1)
问题在这里:
app.UseResponseCompression();
app.UseMiddleware<myMiddleware.LoggerMiddleware>();
按照该顺序,响应压缩中间件将放置在中间件的前面。这意味着压缩中间件将在中间件之前获得请求,而处理响应在中间件之后之后。
尝试在UseResponseCompression()
之前添加中间件,您应该会看到压缩的内容。