有没有办法获取响应的 Content-Type 或相反地使用 WebClient 在 Silverlight 中设置传出请求的 Content-Type?
编辑
我需要发出 http 请求并能够为它们显示进度。我想将发出请求的机制打包到一个通用模块中,并在我的代码中随处使用它。这个我已经做过了。困难似乎是在 POST 中向服务器提交不同类型的数据时,我无法告诉服务器数据是什么(json、xml、表单编码、二进制)
我相信我可以通过将 ?content-type=x 与请求一起传递来处理这个问题,并将服务器设置为优先于 Content-Type 标头。
我也无法知道服务器响应什么样的内容,我想我可以通过在发出请求时传递预期的数据类型来解决这个问题。
如果有人有更好的解决方案,请说出来:)
/编辑
这是我的困境。HttpWebRequest/Response 对象实现了一个允许监控请求进度的内部接口。如果你想做大的请求,让用户看到一个显示下载/上传状态的进度条是非常重要的。
所以使用 HttpWebRequest/Response 就不行了。只留下 WebClient,但我发现了一些奇怪的事情。
它不能被子类化。它实际上并没有密封,但构造函数被标记为 [SecuritySafeCritical],据我所知,这意味着我不能从派生类中调用它。至少我失败了,并且在谷歌上找到了其他失败的人,但我很高兴在这一点上被证明是错误的。
在内部,它使用 BrowserHttpWebResponse,它不会覆盖抽象 Headers 属性,而 WebClient.ResponseHeaders 只是转发给 m_Response.Headers,它只是抛出 NotImplementedException。
不确定 Content-Type 是否会在 ResponseHeaders 中,但我想检查一下。
似乎我们在 Silverlight 中选择了拥有进度信息或 Content-Type 信息但不是两者都有。
根据文档,似乎也无法使用 WebClient 在传出请求上设置 Content-Type。Content-Type 被列为受限标头。虽然我还没有实际测试过。
尽管有趣的是,在发生错误时,您实际上会传递响应对象并可以访问 StatusCode、Content-Type 等。