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]