• 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:下载数据,这个暂时还没用到,先预留位置在此

    http://www.cnblogs.com/dyg540/articles/2514773.html

  • 相关阅读:
    上班不再能上msn了
    小龟不用冬眠了
    Sonne学摄影(3)上海汽车展汽车
    新年提醒银行卡的用户注意了
    转贴:49届世乒赛海外名将介绍究竟谁会对中国队构成威胁??
    用两个词形容现在的生活:忙碌,充实
    终于加入胖友一族
    上海人
    相互残杀
    王励勤,好样的!看49届世乒赛男单决赛
  • 原文地址:https://www.cnblogs.com/zziss/p/2736018.html
Copyright © 2020-2023  润新知