有没有办法获取响应的Content-Type,或者反过来使用WebClient在Silverlight中设置传出请求的Content-Type?
修改
我需要发出http请求并能够显示它们的进度。我想将用于发出请求的机器打包成一个通用模块,并在我的代码中的任何地方使用它。我已经这样做了。困难似乎是在POST中向服务器提交不同类型的数据时我无法告诉服务器数据是什么(json,xml,表单编码,二进制)
我相信我可以通过将?content-type = x与请求一起传递来处理此问题,并将服务器设置为优先于Content-Type标头。
我也无法知道服务器响应的内容类型,我想我可以通过在发出请求时传递预期的数据类型来解决这个问题。
如果有人有更好的解决方案,请说出来:)
/修改
这是我的困境。 HttpWebRequest / Response对象实现了一个内部接口,允许监视请求的进度。如果您想要做大量请求,用户可以看到显示下载/上传状态的进度条非常重要。
因此使用HttpWebRequest / Response已经完成了。只留下WebClient,但我发现了一些奇怪的事情。
它不能被子类化。它实际上并没有被密封,但是构造函数被标记为[SecuritySafeCritical],据我所知,这意味着我不能从派生类中调用它。至少我失败了,并且在Google上找到了其他失败的人,但我很高兴在这一点上被证明是错误的。
在内部,它使用BrowserHttpWebResponse,它不会覆盖抽象的Headers属性,而WebClient.ResponseHeaders只是转发到m_Response.Headers,它只会抛出NotImplementedException。
不确定Content-Type是否会在ResponseHeaders中,但我本来想检查一下。
我们似乎不喜欢选择进度信息或内容类型信息,但两者都没有。
根据文档,似乎无法使用WebClient在传出请求上设置Content-Type。 Content-Type列为受限标题。我实际上没有测试过这个。
虽然有趣的是注意到一个错误,你实际上已经传递了响应对象并且可以访问StatusCode,Content-Type等。
答案 0 :(得分:0)
您是否尝试在WebClient上使用WebClient和DownloadProgressChanged事件?
答案 1 :(得分:0)
如果您的服务器是asp.net,则可以像this那样执行,如果是php,则可以像this那样执行。这些是上传进度的解决方案,它们可能可以根据下载进度进行修改,但不容易。
我们的想法是,他们重写了上传的服务器代码以使用id保存进度,然后客户端轮询服务器以获取当前进度。
答案 2 :(得分:0)
更简单的解决方案可能是让客户端/服务器代码将上传/下载分解为块并一次发送一个。然后,您可以在每个块之后更新进度条。当然,你的块大小越小它就越慢。
另外:您可以通过查询字符串参数告诉服务器它是什么内容类型?