1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Net;
5 using System.Net.Http;
6 using System.Text;
7 using Microsoft.VisualStudio.TestTools.UnitTesting;
8
9 namespace Ruanmou.SOA.UnitTestProject
10 {
11 /// <summary>
12 /// 要求HttpClient的实例化都从这里来 全局只要一个实例,不要using
13 /// 各个请求是隔开的,可以复用链接的
14 /// </summary>
15 public class HttpClientFactory
16 {
17 private static HttpClient _HttpClient = null;
18 static HttpClientFactory()
19 {
20 _HttpClient = new HttpClient(new HttpClientHandler());
21 }
22 public static HttpClient GetHttpClient()
23 {
24 return _HttpClient;
25 }
26 }
27
28
29
30 /// <summary>
31 /// WebApi全部遵循的Http协议,HttpMethod
32 /// 其实就等同于网页,可以去爬虫
33 /// 就时后端模拟Http请求
34 ///
35 /// HttpWebRequest HttpClient
36 ///
37 /// HttpClient
38 /// using (var http = new HttpClient(handler)) 不太好 tcp其实并不能立即释放掉
39 /// 如果高并发式的这样操作,会出现资源不够 积极拒绝
40 /// HttpClient内部有个连接池,各个请求是隔开的,可以复用链接的 实际应该单例一下
41 /// </summary>
42 [TestClass]
43 public class WebapiTest
44 {
45 [TestMethod]
46 public void TestMethod()
47 {
48 //this.AuthorizationDemo();
49
50 var result1 = this.GetClient();
51 var result2 = this.GetWebQuest();
52 var result3 = this.PostClient();
53 var result4 = this.PostWebQuest();
54 var result5 = this.PutClient();
55 var result6 = this.PutWebQuest();
56 var result7 = this.DeleteClient();//传值只能是url
57 var result8 = this.DeleteWebQuest();
58 //Console.WriteLine();
59 }
60
61 #region HttpClient Get
62 /// <summary>
63 /// HttpClient实现Get请求
64 /// </summary>
65 private string GetClient()
66 {
67 //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
68 //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
69 //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
70 //string url = "http://localhost:8088/api/users/Get";
71 //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
72 string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
73 //string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
74 //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
75 //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
76 var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };
77
78 using (var http = new HttpClient(handler))
79 {
80 var response = http.GetAsync(url).Result;//拿到异步结果
81 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
82 //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
83 return response.Content.ReadAsStringAsync().Result;
84 }
85 }
86 #endregion
87
88 #region HttpWebRequest实现Get请求
89 /// <summary>
90 /// HttpWebRequest实现Get请求
91 /// </summary>
92 private string GetWebQuest()
93 {
94 //string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
95 //string url = "http://localhost:8088/api/users/GetUserByID?id=1";
96 //string url = "http://localhost:8088/api/users/GetUserByNameId?userName=Superman&id=1";
97 //string url = "http://localhost:8088/api/users/Get";
98 //string url = "http://localhost:8088/api/users/GetUserByModel?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
99 //string url = "http://localhost:8088/api/users/GetUserByModelUri?UserID=11&UserName=Eleven&UserEmail=57265177%40qq.com";
100 string url = "http://localhost:8088/api/users/GetUserByModelSerialize?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
101 //string url = "http://localhost:8088/api/users/GetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
102 //string url = "http://localhost:8088/api/users/NoGetUserByModelSerializeWithoutGet?userString=%7B%22UserID%22%3A%2211%22%2C%22UserName%22%3A%22Eleven%22%2C%22UserEmail%22%3A%2257265177%40qq.com%22%7D";
103
104 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
105 request.Timeout = 30 * 1000;
106
107 //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
108 //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
109 string result = "";
110 using (var res = request.GetResponse() as HttpWebResponse)
111 {
112 if (res.StatusCode == HttpStatusCode.OK)
113 {
114 StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
115 result = reader.ReadToEnd();
116 }
117 }
118 return result;
119 }
120
121 #endregion
122
123 #region HttpClient实现Post请求
124 /// <summary>
125 /// HttpClient实现Post请求
126 /// </summary>
127 private string PostClient()
128 {
129 //string url = "http://localhost:8088/api/users/register";
130 //Dictionary<string, string> dic = new Dictionary<string, string>()
131 //{
132 // {"","1" }
133 //};
134
135 //string url = "http://localhost:8088/api/users/RegisterNoKey";
136 //Dictionary<string, string> dic = new Dictionary<string, string>()
137 //{
138 // {"","1" }
139 //};
140
141 //string url = "http://localhost:8088/api/users/RegisterUser";
142 //Dictionary<string, string> dic = new Dictionary<string, string>()
143 //{
144 // {"UserID","11" },
145 // {"UserName","Eleven" },
146 // {"UserEmail","57265177@qq.com" },
147 //};
148
149 string url = "http://localhost:8088/api/users/RegisterObject";
150 Dictionary<string, string> dic = new Dictionary<string, string>()
151 {
152 {"User[UserID]","11" },
153 {"User[UserName]","Eleven" },
154 {"User[UserEmail]","57265177@qq.com" },
155 {"Info","this is muti model" }
156 };
157
158 HttpClientHandler handler = new HttpClientHandler();
159 using (var http = new HttpClient(handler))
160 {
161 //使用FormUrlEncodedContent做HttpContent
162 var content = new FormUrlEncodedContent(dic);
163 var response = http.PostAsync(url, content).Result;
164 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
165 return response.Content.ReadAsStringAsync().Result;
166 }
167
168 }
169 #endregion
170
171 #region HttpWebRequest实现post请求
172 /// <summary>
173 /// HttpWebRequest实现post请求
174 /// </summary>
175 private string PostWebQuest()
176 {
177 //string url = "http://localhost:8088/api/users/register";
178 //var postData = "1";
179
180 //string url = "http://localhost:8088/api/users/RegisterNoKey";
181 //var postData = "1";
182
183 var user = new
184 {
185 UserID = "11",
186 UserName = "Eleven",
187 UserEmail = "57265177@qq.com"
188 };
189 //string url = "http://localhost:8088/api/users/RegisterUser";
190 //var postData = JsonHelper.ObjectToString(user);
191
192 var userOther = new
193 {
194 User = user,
195 Info = "this is muti model"
196 };
197 string url = "http://localhost:8088/api/users/RegisterObject";
198 var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
199
200 var request = HttpWebRequest.Create(url) as HttpWebRequest;
201 request.Timeout = 30 * 1000;//设置30s的超时
202 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
203 request.ContentType = "application/json";
204 request.Method = "POST";
205 byte[] data = Encoding.UTF8.GetBytes(postData);
206 request.ContentLength = data.Length;
207 Stream postStream = request.GetRequestStream();
208 postStream.Write(data, 0, data.Length);
209 postStream.Close();
210
211 string result = "";
212 using (var res = request.GetResponse() as HttpWebResponse)
213 {
214 if (res.StatusCode == HttpStatusCode.OK)
215 {
216 StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
217 result = reader.ReadToEnd();
218 }
219 }
220 return result;
221 }
222 #endregion
223
224 #region HttpClient实现Put请求
225 /// <summary>
226 /// HttpClient实现Put请求
227 /// </summary>
228 private string PutClient()
229 {
230 string url = "http://localhost:8088/api/users/RegisterPut";
231 Dictionary<string, string> dic = new Dictionary<string, string>()
232 {
233 {"","1" }
234 };
235
236 //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
237 //Dictionary<string, string> dic = new Dictionary<string, string>()
238 //{
239 // {"","1" }
240 //};
241
242 //string url = "http://localhost:8088/api/users/RegisterUserPut";
243 //Dictionary<string, string> dic = new Dictionary<string, string>()
244 //{
245 // {"UserID","11" },
246 // {"UserName","Eleven" },
247 // {"UserEmail","57265177@qq.com" },
248 //};
249
250 //string url = "http://localhost:8088/api/users/RegisterObjectPut";
251 //Dictionary<string, string> dic = new Dictionary<string, string>()
252 //{
253 // {"User[UserID]","11" },
254 // {"User[UserName]","Eleven" },
255 // {"User[UserEmail]","57265177@qq.com" },
256 // {"Info","this is muti model" }
257 //};
258
259 HttpClientHandler handler = new HttpClientHandler();
260 using (var http = new HttpClient(handler))
261 {
262 //使用FormUrlEncodedContent做HttpContent
263 var content = new FormUrlEncodedContent(dic);
264 var response = http.PutAsync(url, content).Result;
265 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
266 return response.Content.ReadAsStringAsync().Result;
267 }
268
269 }
270 #endregion
271
272 #region HttpWebRequest实现put请求
273 /// <summary>
274 /// HttpWebRequest实现put请求
275 /// </summary>
276 private string PutWebQuest()
277 {
278 //string url = "http://localhost:8088/api/users/registerPut";
279 //var postData = "1";
280
281 //string url = "http://localhost:8088/api/users/RegisterNoKeyPut";
282 //var postData = "1";
283
284 var user = new
285 {
286 UserID = "11",
287 UserName = "Eleven",
288 UserEmail = "57265177@qq.com"
289 };
290 //string url = "http://localhost:8088/api/users/RegisterUserPut";
291 //var postData = JsonHelper.ObjectToString(user);
292
293 var userOther = new
294 {
295 User = user,
296 Info = "this is muti model"
297 };
298 string url = "http://localhost:8088/api/users/RegisterObjectPut";
299 var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
300
301 var request = HttpWebRequest.Create(url) as HttpWebRequest;
302 request.Timeout = 30 * 1000;//设置30s的超时
303 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
304 request.ContentType = "application/json";
305 request.Method = "PUT";
306 byte[] data = Encoding.UTF8.GetBytes(postData);
307 request.ContentLength = data.Length;
308 Stream postStream = request.GetRequestStream();
309 postStream.Write(data, 0, data.Length);
310 postStream.Close();
311
312 string result = "";
313 using (var res = request.GetResponse() as HttpWebResponse)
314 {
315 if (res.StatusCode == HttpStatusCode.OK)
316 {
317 StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
318 result = reader.ReadToEnd();
319 }
320 }
321 return result;
322 }
323 #endregion
324
325 #region HttpClient实现Delete请求
326 /// <summary>
327 /// HttpClient实现Put请求
328 /// 没放入数据
329 /// </summary>
330 private string DeleteClient()
331 {
332 string url = "http://localhost:8088/api/users/RegisterDelete/1";
333 Dictionary<string, string> dic = new Dictionary<string, string>()
334 {
335 {"","1" }
336 };
337
338 //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
339 //Dictionary<string, string> dic = new Dictionary<string, string>()
340 //{
341 // {"","1" }
342 //};
343
344 //string url = "http://localhost:8088/api/users/RegisterUserDelete";
345 //Dictionary<string, string> dic = new Dictionary<string, string>()
346 //{
347 // {"UserID","11" },
348 // {"UserName","Eleven" },
349 // {"UserEmail","57265177@qq.com" },
350 //};
351
352 //string url = "http://localhost:8088/api/users/RegisterObjectDelete";
353 //Dictionary<string, string> dic = new Dictionary<string, string>()
354 //{
355 // {"User[UserID]","11" },
356 // {"User[UserName]","Eleven" },
357 // {"User[UserEmail]","57265177@qq.com" },
358 // {"Info","this is muti model" }
359 //};
360
361 HttpClientHandler handler = new HttpClientHandler();
362 using (var http = new HttpClient(handler))
363 {
364 //使用FormUrlEncodedContent做HttpContent
365 var content = new FormUrlEncodedContent(dic);
366 var response = http.DeleteAsync(url).Result;
367 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
368 return response.Content.ReadAsStringAsync().Result;
369 }
370 }
371 #endregion
372
373 #region HttpWebRequest实现put请求
374 /// <summary>
375 /// HttpWebRequest实现put请求
376 /// </summary>
377 private string DeleteWebQuest()
378 {
379 //string url = "http://localhost:8088/api/users/registerDelete";
380 //var postData = "1";
381
382 //string url = "http://localhost:8088/api/users/RegisterNoKeyDelete";
383 //var postData = "1";
384
385 var user = new
386 {
387 UserID = "11",
388 UserName = "Eleven",
389 UserEmail = "57265177@qq.com"
390 };
391 //string url = "http://localhost:8088/api/users/RegisterUserDelete";
392 //var postData = JsonHelper.ObjectToString(user);
393
394 var userOther = new
395 {
396 User = user,
397 Info = "this is muti model"
398 };
399 string url = "http://localhost:8088/api/users/RegisterObjectDelete";
400 var postData = Newtonsoft.Json.JsonConvert.SerializeObject(userOther);
401
402 var request = HttpWebRequest.Create(url) as HttpWebRequest;
403 request.Timeout = 30 * 1000;//设置30s的超时
404 request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
405 request.ContentType = "application/json";
406 request.Method = "Delete";
407 byte[] data = Encoding.UTF8.GetBytes(postData);
408 request.ContentLength = data.Length;
409 Stream postStream = request.GetRequestStream();
410 postStream.Write(data, 0, data.Length);
411 postStream.Close();
412
413 string result = "";
414 using (var res = request.GetResponse() as HttpWebResponse)
415 {
416 if (res.StatusCode == HttpStatusCode.OK)
417 {
418 StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
419 result = reader.ReadToEnd();
420 }
421 }
422 return result;
423 }
424 #endregion
425
426
427 #region 用户登陆 获取ticket后使用
428 private void AuthorizationDemo()
429 {
430 string ticket = "";
431 {
432 string loginUrl = "http://localhost:8088/api/users/Login?Account=Admin&Password=123456";
433 var handler = new HttpClientHandler();//{ AutomaticDecompression = DecompressionMethods.GZip };
434
435 using (var http = new HttpClient(handler))
436 {
437 var response = http.GetAsync(loginUrl).Result;//拿到异步结果
438 Console.WriteLine(response.StatusCode); //确保HTTP成功状态值
439 //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
440 ticket = response.Content.ReadAsStringAsync().Result.Replace("\"{\\\"Result\\\":true,\\\"Ticket\\\":\\\"", "").Replace("\\\"}\"", "");
441 //ticket = JsonHelper.StringToObject<TicketModel>(response.Content.ReadAsStringAsync().Result).Ticket;
442 }
443 }
444 {
445 string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
446 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
447 request.Timeout = 30 * 1000;
448 request.Headers.Add(HttpRequestHeader.Authorization, "BasicAuth " + ticket);//头文件增加Authorization
449 //request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36";
450 //request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
451 string result = "";
452 using (var res = request.GetResponse() as HttpWebResponse)
453 {
454 if (res.StatusCode == HttpStatusCode.OK)
455 {
456 StreamReader reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
457 result = reader.ReadToEnd();
458 }
459 }
460 }
461 {
462 string url = "http://localhost:8088/api/users/GetUserByName?username=superman";
463 var handler = new HttpClientHandler();
464
465 using (var http = new HttpClient(handler))
466 {
467 http.DefaultRequestHeaders.Add("Authorization", "BasicAuth " + ticket);//头文件增加Authorization
468 var response = http.GetAsync(url).Result;
469 Console.WriteLine(response.StatusCode);
470 string result = response.Content.ReadAsStringAsync().Result;
471 }
472 }
473 }
474 #endregion
475 }
476 }