木鱼 发表于 2012-12-22 02:47:27

Post Operation for Windows 8 Apps || Windows Phone

<div id="cnblogs_post_body">简单实现HTTP Post & Get 请求操作, post 可用于文件或表单。此类适用于Windows 8 Apps 和 Windows phone.
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifHttpHelper<div id="cnblogs_code_open_5a463513-9ac8-4729-a8fe-7cc75c68706b" class="cnblogs_code_hide">1   /// <summary>2   /// Use for HTTP Post Method: send simple data or file3   /// </summary>4   public class HttpPostHelper5     {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;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 HttpGetHelper121     {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             else131             {132                 request.BeginGetResponse(ResponseReady, request);133             }134       }135 136         private void ResponseReady(IAsyncResult asyncResult)137       {138             try139             {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             catch157             {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 : EventArgs173     {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   }
页: [1]
查看完整版本: Post Operation for Windows 8 Apps || Windows Phone