WP7 网络请求之WebClient
WebClient运行于UI线程,支持编码方式的设定、支持POST/GET方式提交、不支持同步请求、不支持超时设定。WP7会缓存URL链 接,所以两次请求,尽管网络端数据发生了变化,得到的还会是同样的数据,这点要特别注意,避免的方式是在URL的末端,加一个当前时间的参数,这样每次请 求的url都不一样,从而避免的缓存的影响。另外要说的是,WebClient不适合大数据量的的请求,那样会造成UI线程的繁忙,最终导致无法响应用户 的操作。当然WebClient也有它的优点,因为经过了封装,用起来方面,也无需做太多的设置,适合小数据量的请求。
实例1:用post方式提交数据
Uri url = new Uri(“http//:www.163.com”);
string str = "name=name1&mo=" + HttpUtility.UrlEncode("中文数据和特殊字符最好编码一下") + "&Cache=" + System.DateTime.Now;
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.UTF8Encoding.UTF8;
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
//webClient.UploadProgressChanged += new UploadProgressChangedEventHandler(webClient_UploadProgressChanged);//这个是
webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(CardInfoUp_Completed);//这里是回调函数
webClient.UploadStringAsync(url, "POST", str);
private void CardInfoUp_Completed(object sender, UploadStringCompletedEventArgs e)
{
if(e.Error==null)
{
// XElement strXml = XElement.Parse(e.Result);//这是网络返回的数据
MessageBox.Show("成功!");
}
else
{
MessageBox.Show(e.Error.Message);
}
}
如果想代码更简洁一些,可以使用匿名函数,像下面这样:
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.UTF8Encoding.UTF8;
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
webClient.UploadStringCompleted += (s, o) =>
{
if (o.Error == null)
{
//string data=o.Result ;//这是网络返回的数据
MessageBox.Show("成功");
}
else
{
throw new Exception(o.Error.Message);
}
};
webClient.UploadStringAsync(url, "POST", str);
实例2:打开网页,可以带参数,如果服务器返回的内容经过加工,可以使用这种方式变相下载数据
WebClient webClient = new WebClient();
webClient.OpenReadAsync(url); //在不阻止调用线程的情况下,从资源返回数据
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(CardInfoDown_Completed); //异步操作完成时发生
private void CardInfoDown_Completed(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Result))
{
string strStream = reader.ReadToEnd();//这里是返回的数据
MessageBox.Show("下载成功");
}
}
else
{
MessageBox.Show(e.Error.Message);
}
}
下面是简洁的写法:
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.UTF8Encoding.UTF8;
webClient.OpenReadAsync(url); //在不阻止调用线程的情况下,从资源返回数据
webClient.OpenReadCompleted += (s,o) =>
{
if (o.Error == null)
{
//指定以UTF-8方式读取流
using (System.IO.StreamReader reader = new System.IO.StreamReader(o.Result, System.Text.UTF8Encoding.UTF8))
{
string strStream = reader.ReadToEnd();//这里是返回的数据
MessageBox.Show("下载成功");
}
}
else
{
MessageBox.Show(o.Error.Message);
}
};
实例2:下载数据,这个暂时还没用到,先预留位置在此
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?