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     }
原文地址:https://www.cnblogs.com/denjuy/p/2790794.html