代码之家  ›  专栏  ›  技术社区  ›  Eloff

C#Silverlight WebClient获取响应的内容类型?

  •  2
  • Eloff  · 技术社区  · 16 年前

    有没有办法使用WebClient在Silverlight中获取响应的内容类型,或者反过来设置传出请求的内容类型?

    我相信我可以通过在请求中传递?content type=x来处理这个问题,并将服务器设置为优先于content type头。

    我也无法知道服务器响应的内容是什么,我想我可以通过在发出请求时传递预期类型的数据来解决这个问题。

    如果有人有更好的解决方案,请大声说:)

    因此,使用HttpWebRequest/Response是不可能的。只留下WebClient,但我发现了一些奇怪的事情。

    它不能被子类化。它实际上不是密封的,但是构造函数被标记为[SecuritySafeCritical],据我所知,这意味着我不能从派生类调用它。至少我失败了,在谷歌上找到了其他失败的人,但我很高兴在这一点上被证明是错误的。

    在内部,它使用BrowserHttpWebResponse,它不覆盖abstract Headers属性,WebClient.ResponseHeaders只转发给m_Response.Headers,它只抛出NotImplementedException。

    不确定内容类型是否在ResponseHeaders中,但我想检查一下。

    根据文档,似乎也没有办法通过WebClient设置传出请求的内容类型。内容类型列为受限标题。我还没有真正测试过这个。

    虽然有意思的是,在发生错误时,您实际上会传递响应对象,并可以访问StatusCode、Content Type等。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Michael S. Scherotter    16 年前

    您是否尝试过在WebClient上使用WebClient和DownloadProgressChanged事件?

        2
  •  0
  •   Mike Blandford    16 年前

    你可以这样做 this 如果您的服务器是asp.net或类似的 this 如果是php。这些都是用于上传进度的解决方案,它们可能可以修改为下载进度,但并不容易。

        3
  •  0
  •   Mike Blandford    16 年前

    一个更简单的解决方案可能是让客户机/服务器代码将上传/下载分块,然后一次发送一个。然后可以在每个块之后更新进度条。当然,块大小越小,它运行的速度就越慢。

    另外:您可以通过查询字符串参数告诉服务器它是什么内容类型?