如何在ASP.NET Core中禁用响应解压缩? [英] How to disable response decompression in ASP.NET Core?
问题描述
我需要禁用响应压缩。我有.NET 4.5版本的Web.config,但我现在需要.NET Core 2.x。
<customBinding>
<binding name="BasicHttpBinding_Service">
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport decompressionEnabled="false" />
</binding>
</customBinding>
我的Web服务不支持压缩响应,但我仍然收到错误:
System.ServiceModel.ProtocolException:‘响应消息的内容类型APPLICATION/x-gZIP与绑定的内容类型(Text/XML;Charset=utf-8)不匹配。如果使用自定义编码器,请确保正确实现IsContent TypeSupport方法。响应的前653个字节为:’?‘
推荐答案
ASP.NET核心有documentation on compression。如您所见,ASP.NET Core不再使用web.config。如果您在IIS中托管您的ASP.NET Core应用程序,则仍会使用一些web.config设置,但只使用与通用IIS托管相关的设置,而不是特定于应用程序的设置(动态压缩是IIS的一项功能,因此该设置仍然相关,但ASP.NET Core中不再使用过去与ASP.NET应用程序相关的其他web.config设置)。遗憾的是,我目前找不到有关哪些web.config设置仍然相关的文档。
总之,ASP.NET Core默认使用Kestrel Web服务器,该服务器是在代码中配置的。对上面链接的文档中的示例稍作修改,我相信这可能会奏效:
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCompression(options =>
{
var gzip = options.Providers.OfType<GzipCompressionProvider>().FirstOrDefault();
if (gzip != null)
{
options.Providers.Remove(gzip);
}
});
}
但这取决于压缩来自哪里。如果您的ASP.NET Core应用程序和Internet之间有一个反向代理(例如IIS,但可能是nginx、haproxy等),它们可能正在进行压缩,因此您需要了解您的应用程序体系结构,并在正确的位置将其关闭。
这篇关于如何在ASP.NET Core中禁用响应解压缩?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!