为了将WebClient与压缩内容一起使用,我扩展了它并更改了默认的WebRequest,如下所示:
protected override WebRequest GetWebRequest(Uri address)
{
var req = base.GetWebRequest(address) as HttpWebRequest;
req.AutomaticDecompression = DecompressionMethods.GZip;
return req;
}
这很好,除了现在没有触发DownloadProgressChanged事件,即使服务器正确设置了Content-Length标头(服务器没有对响应进行分块)。
为什么会这样?
编辑:实际上,DownloadProgressChanged事件正在触发,但它总是显示百分比为0,直到下载完成,当它显示100.导致此行为的原因是什么?
答案 0 :(得分:0)
嗯,我不太确定,但我可以看到你并没有完全实现这一点。也许这就是为什么......你可能会丢失标题。反射器显示更多代码。也许方法的第二行是你需要的。
protected virtual WebRequest GetWebRequest(Uri address)
{
WebRequest request = WebRequest.Create(address);
this.CopyHeadersTo(request);
if (this.Credentials != null)
{
request.Credentials = this.Credentials;
}
if (this.m_Method != null)
{
request.Method = this.m_Method;
}
if (this.m_ContentLength != -1L)
{
request.ContentLength = this.m_ContentLength;
}
if (this.m_ProxySet)
{
request.Proxy = this.m_Proxy;
}
if (this.m_CachePolicy != null)
{
request.CachePolicy = this.m_CachePolicy;
}
return request;
}