zoukankan      html  css  js  c++  java
  • Post Operation for Windows 8 Apps || Windows Phone

    简单实现HTTP Post & Get 请求操作, post 可用于文件或表单。此类适用于Windows 8 Apps 和 Windows phone.

    HttpHelper
      1     /// <summary>
      2     /// Use for HTTP Post Method: send simple data or file
      3     /// </summary>
      4     public class HttpPostHelper
      5     {
      6         public void PostData(string postUrl, IDictionary<string, object> parameters)
      7         {
      8             string formDataBoundary = "-----------------------------525258000";
      9             string contentType = "multipart/form-data;boundary=" + formDataBoundary;
     10 
     11             _formData = GetFormData(parameters, formDataBoundary);
     12             ExcutePostRequest(postUrl, contentType);
     13         }
     14 
     15         private void ExcutePostRequest(string postUrl, string contentType)
     16         {
     17             var request = WebRequest.Create(postUrl) as HttpWebRequest;
     18 
     19             if (request == null)
     20             {
     21                 Debug.WriteLine("Request is not a request.");
     22             }
     23 
     24             request.Method = "POST";
     25             request.ContentType = contentType;
     26             request.BeginGetRequestStream(RequestReady, request);
     27         }
     28 
     29         private void RequestReady(IAsyncResult asyncResult)
     30         {
     31             var request = asyncResult.AsyncState as HttpWebRequest;
     32 
     33             if (request == null) return;
     34             using (Stream requestStream = request.EndGetRequestStream(asyncResult))
     35             {
     36                 requestStream.Write(_formData, 0, _formData.Length);
     37             }
     38 
     39             request.BeginGetResponse(ResponseReady, request);
     40         }
     41 
     42         private void ResponseReady(IAsyncResult asyncResult)
     43         {
     44             var request = asyncResult.AsyncState as HttpWebRequest;
     45 
     46             try
     47             {
     48                 var response = (HttpWebResponse) request.EndGetResponse(asyncResult);
     49                 string result;
     50                 using (var responseStream = response.GetResponseStream())
     51                 {
     52                     using (var reader = new StreamReader(responseStream))
     53                     {
     54                         result = reader.ReadToEnd();
     55                     }
     56                 }
     57 
     58                 if (DownloadStringCompleted != null)
     59                 {
     60                     DownloadStringCompleted(this, new DownloadStringCompletedEventArgs(result));
     61                 }
     62             }
     63             catch
     64             {
     65                 if (DownloadStringCompleted != null)
     66                 {
     67                     DownloadStringCompleted(this,
     68                                             new DownloadStringCompletedEventArgs(
     69                                                 new Exception("Error getting HTTP web response.")));
     70                 }
     71             }
     72         }
     73 
     74         private static byte[] GetFormData(IEnumerable<KeyValuePair<string, object>> parameters, string boundary)
     75         {
     76             Stream formDataStream = new MemoryStream();
     77             var encoding = Encoding.UTF8;
     78             foreach (var param in parameters)
     79             {
     80                 if (param.Value is byte[])
     81                 {
     82                     var fileData = param.Value as byte[];
     83 
     84                     string header =
     85                         string.Format(
     86                             "--{0}\r\nContent-Disposition:form-data;name=\"file\";filename=\"{1}\";\r\nContent-Type:application/zip\r\n\r\n",
     87                             boundary, param.Key);
     88                     formDataStream.Write(encoding.GetBytes(header), 0, header.Length);
     89                     formDataStream.Write(fileData, 0, fileData.Length);
     90                 }
     91                 else
     92                 {
     93                     string postData = string.Format(
     94                         "--{0}\r\nContent-Disposition:form-data;name=\"{1}\"\r\n\r\n{2}\r\n", boundary, param.Key,
     95                         param.Value);
     96                     formDataStream.Write(encoding.GetBytes(postData), 0, postData.Length);
     97                 }
     98             }
     99             string footer = "\r\n--" + boundary + "--\r\n";
    100             formDataStream.Write(encoding.GetBytes(footer), 0, footer.Length);
    101 
    102             formDataStream.Position = 0;
    103             var formData = new byte[formDataStream.Length];
    104             formDataStream.Read(formData, 0, formData.Length);
    105             formDataStream.Dispose();
    106 
    107             return formData;
    108         }
    109 
    110         public delegate void DownloadStringCompletedHandler(object sender, DownloadStringCompletedEventArgs e);
    111 
    112         public event DownloadStringCompletedHandler DownloadStringCompleted;
    113 
    114         private byte[] _formData = null;
    115     }
    116 
    117     /// <summary>
    118     /// Use for HTTP Get Method 
    119     /// </summary>
    120     public class HttpGetHelper
    121     {
    122         public void ExecuteGetReuqest(string url)
    123         {
    124             var request = WebRequest.Create(url) as HttpWebRequest;
    125 
    126             if (request == null)
    127             {
    128                 Debug.WriteLine("Request is not a request.");
    129             }
    130             else
    131             {
    132                 request.BeginGetResponse(ResponseReady, request);
    133             }
    134         }
    135 
    136         private void ResponseReady(IAsyncResult asyncResult)
    137         {
    138             try
    139             {
    140                 var request = (HttpWebRequest) asyncResult.AsyncState;
    141                 var response = (HttpWebResponse) request.EndGetResponse(asyncResult);
    142                 string result;
    143                 using (var responseStream = response.GetResponseStream())
    144                 {
    145                     using (var reader = new StreamReader(responseStream))
    146                     {
    147                         result = reader.ReadToEnd();
    148                     }
    149                 }
    150 
    151                 if (DownloadStringCompleted != null)
    152                 {
    153                     DownloadStringCompleted(this, new DownloadStringCompletedEventArgs(result));
    154                 }
    155             }
    156             catch
    157             {
    158                 if (DownloadStringCompleted != null)
    159                 {
    160                     DownloadStringCompleted(this,
    161                                             new DownloadStringCompletedEventArgs(
    162                                                 new Exception("Error getting HTTP web response.")));
    163                 }
    164             }
    165         }
    166 
    167         public delegate void DownloadStringCompletedHandler(object sender, DownloadStringCompletedEventArgs e);
    168 
    169         public event DownloadStringCompletedHandler DownloadStringCompleted;
    170     }
    171 
    172     public class DownloadStringCompletedEventArgs : EventArgs
    173     {
    174         public DownloadStringCompletedEventArgs(string result)
    175         {
    176             Result = result;
    177         }
    178 
    179         public DownloadStringCompletedEventArgs(Exception ex)
    180         {
    181             Error = ex;
    182         }
    183 
    184         public string Result { get; private set; }
    185         public Exception Error { get; private set; }
    186     }
  • 相关阅读:
    强制隐藏android键盘
    百度地图3.7.1和传感器的应用
    百度地图3.7.1获取当前的位置,并自定义自身位置的图标
    百度地图3.7.1的卫星地图,实时交通的改变
    百度地图3.7.1的配置
    RecyclerView的ListView显示效果
    单元测试
    自定义侧滑菜单
    synchronized关键字的用法
    Android 开发中R文件的丢失
  • 原文地址:https://www.cnblogs.com/denjuy/p/2790794.html
Copyright © 2011-2022 走看看