强制关闭一项服务的编码?

force encoding off for one service?

我正在尝试实现通过 Outlook 客户端链接的 RSS 提要。该提要适用于除我的开发机器以外的所有机器。当查看从服务返回的结果时,很明显我的机器正在通过 gzip 编码返回数据,而 Outlook 客户端看起来不够智能,无法解压缩。有什么方法可以检查服务中的请求 headers 并确保此特定服务输出从未被压缩?

注意:我没有使用缓存,也没有调用 .ToCompressedResult。我的服务使用 XMLWriter 和 returns 生成 xml xml 作为字符串。我在服务上也有 [AddHeader(ContentType = MimeTypes.XmlText)]。所以我什至不确定为什么返回的结果是压缩的。

客户端不工作

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ServiceStack/4.056 Win32NT/.NET
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 21 Jun 2016 20:57:39 GMT
Content-Length: 539

有效的客户端

 HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: text/xml; charset=utf-8
    Vary: Accept
    Server: Microsoft-IIS/7.5
    X-Powered-By: ServiceStack/4.056 Win32NT/.NET
    X-AspNet-Version: 4.0.30319
    Set-Cookie: ss-id=YVha5gBKFgrsMLJiOFDs; path=/; HttpOnly
    Set-Cookie: ss-pid=WQBwbdU2txHLhgZLbRwR; expires=Sat, 21-Jun-2036 19:45:41 GMT; path=/; HttpOnly
    X-Powered-By: ASP.NET
    Date: Tue, 21 Jun 2016 19:45:41 GMT
    Content-Length: 1456

如果您不使用缓存,则 SerivceStack 不会执行压缩,因此必须由 IIS/ASP.NET 完成,您应该可以在 Web.config 中禁用它:

<system.webServer>
  <urlCompression doStaticCompression="false" doDynamicCompression="false"/>
</system.webServer>

顺便提一下,客户端要求压缩响应的方式是使用 Accept-Encoding HTTP 请求 Header,例如:

Accept-Encoding:gzip, deflate

如果客户端不包含 Accept-Encoding 服务器不应该 return 压缩结果。