是否有一种方法可以获得响应的内容类型,或者相反地使用WebClient在Silverlight中设置传出请求的内容类型?
编辑
我需要做http请求,并能够显示他们的进展。我想将发出请求的机器打包到一个通用模块中,并在代码中的任何地方使用它。我已经做过了。困难似乎是当在POST中向服务器提交不同类型的数据时,我无法告诉服务器数据是什么(json、xml、表单编码、二进制)。
我相信我可以通过在请求中传递? Content-Type =x来处理这个问题,并将服务器设置为更倾向于使用内容类型标头。
我也无法知道服务器响应的内容类型,我认为我可以通过在发出请求时传递预期的数据类型来解决这个问题。
如果有人有更好的解决方案,请大声说:)
/Edit
这就是我的困境。HttpWebRequest/Response对象实现了允许监视请求进度的内部接口。如果您想做大请求,非常重要的是用户能够看到显示下载/上传状态的进度条。
因此,使用HttpWebRequest/Response是不存在的。只留下了WebClient,但我发现了一些奇怪的东西。
它不能被子类。它实际上不是密封的,但构造函数被标记为SecuritySafeCritical,据我所知,这意味着我不能从派生类调用它。至少我失败了,并在谷歌上找到了其他失败的人,但我很乐意在这一点上被证明是错的。
在内部,它使用BrowserHttpWebResponse (它不覆盖抽象Header属性),而WebClient.ResponseHeaders只向m_Response.Headers转发,后者只抛出NotImplementedException。
还不确定内容类型是否会出现在ResponseHeaders中,但我想检查一下。
似乎我们有一个不愉快的选择,有进展信息或内容类型的信息,但不是两者在银光。
根据文档,似乎也没有办法用WebClient来设置传出请求的内容类型。Content被列为受限制的标题。不过,我还没有真正测试过这个。
尽管值得注意的是,在出现错误时,实际上会传递响应对象并访问StatusCode、Content等。
发布于 2009-10-07 19:11:38
一个更简单的解决方案可能是让客户机/服务器代码将上传/下载分解为块,然后一次发送一个。然后,您可以在每个块之后更新进度条。当然,你的块越小,它的速度就越慢。
另外:您可以通过查询字符串参数告诉服务器它是什么内容类型?
发布于 2009-08-11 04:41:31
您试过在WebClient上使用WebClient和DownloadProgressChanged事件吗?
发布于 2009-10-07 19:09:29
如果您的服务器是asp.net,您可以像asp.net一样这样做,如果它是php,也可以像这一样。这些是上传进度的解决方案,它们可能会被修改为下载进度,但并不容易。
这样做的想法是,他们重写了进行上传以使用id保存进度的服务器代码,然后客户端轮询服务器以获得当前的进度。
https://stackoverflow.com/questions/1253289
复制相似问题