Silverlight 中的 httpwebResponse 和编码

本文关键字:编码 httpwebResponse 中的 Silverlight | 更新日期: 2023-09-27 18:33:45

如何在 silverlight 中获得httpWebresponse?没有方法getResponse所以这段代码不起作用

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

以及如何改变这一点

...new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding(1251)))

我在 1251 上出错。编码的名称是什么?

Silverlight 中的 httpwebResponse 和编码

对于第一个:您需要使用异步版本,因为SL中没有同步网络调用。

public void Button_Click(object sender, EventArgs e)
{
    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
    req.Method = "GET";
    req.BeginGetResponse(HWRCallback, req);
}
void HWRCallback(IAsyncResult ar)
{
    HttpWebRequest req = (HttpWebRequest)ar.AsyncState;
    HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(ar);
    // use response
}

对于第二个(顺便说一下,下次考虑问两个问题),也许 Silverlight 不支持该编码。循环浏览Encoding.GetEncodings()的结果以查看该平台中可用的所有编码。

考虑使用 WebClient 类,特别是 DownloadStringAsync 方法:

var client = new WebClient();
client.DownloadStringCompleted += (sender, e) =>
{
    string result = e.Result;
};
client.DownloadStringAsync(uri);

它使将 HTTP 请求作为异步操作执行比 HttpWebRequest 更简单。(在 Silverlight 中,HTTP 请求必须是异步的。它以字符串形式方便地提供结果,处理可能出现的所有编码问题。(服务器通常会告诉客户端使用哪种编码。