在 Silverlight 中请求 GZipped 内容
本文关键字:GZipped 内容 请求 Silverlight | 更新日期: 2023-09-27 17:55:22
我在使用 Silverlight 5 请求 Gzip 内容时遇到问题。为了减少已用带宽,我想对从我们的网络服务请求的内容使用 gzip,但不幸的是这不起作用。
我正在使用客户端堆栈并发送HttpWebRequest。我尝试设置接受编码标头,但它告诉我不允许我直接更改它 - 并且没有其他属性!
那么如何发送自定义接受编码标头呢?
这是我的应用程序构造函数中的代码:
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
这是我创建请求和设置标头的方式:
var webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
webRequest.Headers["Accept-Encoding"] = "gzip, deflate";
这是例外:
{System.ArgumentException: The 'Accept-Encoding' header cannot be modified directly.
Parameter name: name
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at MyClass}
不幸的答案是:如果你想gzip,不要使用客户端堆栈(浏览器堆栈已经为你处理了这个问题)
在这种情况下,
我很幸运能够控制服务端和客户端。我现在所做的是添加一个额外的自定义标头,该标头基本上将覆盖接受编码标头。我称之为"接受-编码-覆盖"。当我的服务遇到此标头时,无论接受编码标头中的内容如何,它都会压缩内容。在客户端 silverlight 端,我检查响应中的内容编码标头,并在必要时使用 SharpZipLib 将其解压缩(DotNetZip 不起作用)。
我仍然标记dotMorten,因为他的回答实际上是对我问题的回答。使用 ClientStack 时无法设置标头。