3

我正在使用 web api 构建一个 RESTful 服务。我的客户端是一个 HTML5/Jquery 应用程序。该服务和应用程序在 IIS 5.1 上完美运行。但是当我切换到 IIS 7.5 时,我看到响应包含一个 Transfer-Encoding: chunked header 并且我的客户端不理解/呈现 UI 元素(顺便说一下,这个 HTML 5/JQuery 的东西是由第三方完成的,我不想要更改他们的代码。我为什么要这样做?毕竟,在我们迁移到 IIS 7.5 之前它运行良好)。我的问题是:

  1. 我如何/在哪里在 web api 中添加“内容长度”http 标头,以便 IIS 不会“块”对响应进行编码?
  2. 有没有办法在 IIS 7.5 的站点/服务器级别禁用此编码?

当我从浏览器/提琴手访问服务时,我得到了正确的响应(xml/json)。我正在使用 Json.net 格式化程序。

4

2 回答 2

1

利用

myHttpResponseMessage.Headers.TransferEncodingChunked = false;

关闭分块编码。

于 2012-05-21T09:34:56.483 回答
1

这可能是由于这个在 beta 后修复的错误:

“DevDiv 388456 - 当内容长度已知时,WebHost 不应使用传输编码分块” http://aspnetwebstack.codeplex.com/SourceControl/changeset/changes/06f52b894414#src%2fSystem.Web.Http.WebHost%2fHttpControllerHandler.cs

设置 response.Headers.TransferEncodingChunked = false; 没有为我解决这个问题。

此外,由于在顶部按下“解码”按钮,您可能会在 Fiddler 中获得不同的结果,该按钮会自动对响应进行去块化并从响应中删除传输编码标头。

于 2012-05-25T12:49:27.353 回答