gpt4 book ai didi

asp.net webservice处理gzip压缩请求

转载 作者:行者123 更新时间:2023-12-04 03:54:44 25 4
gpt4 key购买 nike

我编写了一个 asp.net .asmx webservice 来处理来自第三方工具的请求。第三方工具向 Web 服务发出 http POST 请求以获取用户信息。我正在使用 IIS7

在选中“删除所有编码”的情况下运行 Fiddler,我可以看到 Web 服务调用并且一切正常。如果我取消选中“删除所有编码”,Web 服务调用将失败并显示 400 错误请求。我看到的不同之处在于 Fiddler 正在删除标题“Content-Encoding:gzip”并且正在解压缩内容。

因此,当移除 Content-Encoding header 并解压缩内容时,我的 Web 服务运行良好。当 header 存在并且内容被压缩时,Web 服务将失败。

我怎么能:

  • 配置我的 web 服务以告诉客户端它不会接受压缩请求(并希望第三方工具尊重这一点)
  • 在asp.net处理早期解压内容
  • 修改我的 web 服务以使用压缩数据

  • 更新 :要清楚,我不需要在响应中配置 gzip 编码,我需要处理对我的 web 服务的 gzip 编码的请求。

    更新 2 :第三方工具是 Salesforce.com Outlook 插件。所以,我无权修改它,它被许多其他公司使用而没有麻烦。这一定是我正在做(或不做)的事情

    更新 3 : 找到一篇帖子 here这表示 IIS 不支持带有压缩数据的传入 POST 请求,它只支持压缩响应。这仍然是真的吗?

    最佳答案

    最简单的技术是创建一个 HttpModule替换请求过滤器。它更具可重用性,并且避免了 Global.asax。也不需要像 GZipStream 那样创建新的解压缩流类。准备好了。这是完整的代码,它也删除了 Content-Encoding: gzip不再需要了:

    public class GZipRequestDecompressingModule : IHttpModule
    {
    public void Init(HttpApplication context)
    {
    context.BeginRequest += (sender, e) =>
    {
    var request = (sender as HttpApplication).Request;

    string contentEncoding = request.Headers["Content-Encoding"];

    if (string.Equals(contentEncoding, "gzip",
    StringComparison.OrdinalIgnoreCase))
    {
    request.Filter = new GZipStream(request.Filter,
    CompressionMode.Decompress);
    request.Headers.Remove("Content-Encoding");
    }
    };
    }
    public void Dispose()
    {
    }
    }

    要激活此模块,请将以下部分添加到您的 web.config 中:
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    <add name="AnyUniqueName"
    type="YourNamespace.GZipRequestDecompressingModule, YourAssembly"
    preCondition="integratedMode" />
    </modules>
    </system.webServer>

    关于asp.net webservice处理gzip压缩请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377106/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com