SOACommon.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net.Http;
  6. using System.Net.Http.Headers;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Ant.Common
  10. {
  11. public class SOACommon
  12. {
  13. /// <summary>
  14. /// 抽象接口调用方法
  15. /// </summary>
  16. /// <typeparam name="T"></typeparam>
  17. /// <param name="apiurl"></param>
  18. /// <param name="method"></param>
  19. /// <param name="timeout"></param>
  20. /// <returns></returns>
  21. public async static Task<dynamic> GetDataAsync<T>(string apiurl, string method, int timeout = 3000)
  22. {
  23. HttpClient client = new HttpClient
  24. {
  25. BaseAddress = new Uri(apiurl),
  26. Timeout = TimeSpan.FromMilliseconds(timeout)
  27. };
  28. using (var response = await client.GetAsync(method))
  29. {
  30. if (response.IsSuccessStatusCode)
  31. {
  32. var reslut = await response.Content.ReadAsAsync<T>();
  33. return reslut;
  34. }
  35. else
  36. {//进行轮询下一个服务器的URL进行调用
  37. }
  38. return null;
  39. }
  40. }
  41. /// <summary>
  42. ///
  43. /// </summary>
  44. /// <param name="apiurl"></param>
  45. /// <param name="method"></param>
  46. /// <param name="timeout"></param>
  47. /// <returns></returns>
  48. public async static Task<dynamic> GetDynamicAsync(string apiurl, string method, int timeout = 3000)
  49. {
  50. HttpClient httpClient = new HttpClient()
  51. {
  52. BaseAddress = new Uri(apiurl),
  53. Timeout = TimeSpan.FromMilliseconds(timeout)
  54. };
  55. // 创建一个异步GET请求,当请求返回时继续处理
  56. await httpClient.GetAsync(method).ContinueWith(
  57. (requestTask) =>
  58. {
  59. HttpResponseMessage response = requestTask.Result;
  60. // 确认响应成功,否则抛出异常
  61. response.EnsureSuccessStatusCode();
  62. // 异步读取响应为字符串
  63. response.Content.ReadAsStringAsync().ContinueWith(
  64. (readTask) =>
  65. {
  66. var relsut = readTask.Result;
  67. return relsut;
  68. });
  69. });
  70. return null;
  71. }
  72. /// <summary>
  73. /// POST请求通过请求JOSN字符串后返回也是JOSN字符串
  74. /// </summary>
  75. /// <param name="apiurl"></param>
  76. /// <param name="method"></param>
  77. /// <param name="josnString"></param>
  78. /// <param name="timeout"></param>
  79. /// <returns></returns>
  80. public async static Task<string> PostDataAsync(string apiurl, string method, string josnString, int timeout = 3000)
  81. {
  82. HttpContent httpContent = new StringContent(josnString);
  83. httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  84. HttpClient httpClient = new HttpClient
  85. {
  86. BaseAddress = new Uri(apiurl),
  87. Timeout = TimeSpan.FromMilliseconds(timeout)
  88. };
  89. using (var response = await httpClient.PostAsync(method, httpContent))
  90. {
  91. if (response.IsSuccessStatusCode)
  92. {
  93. Task<string> reslut = response.Content.ReadAsStringAsync();
  94. return reslut.Result;
  95. }
  96. }
  97. return string.Empty;
  98. }
  99. /// <summary>
  100. /// POST请求通过实体对象传递返回也是实体对象
  101. /// </summary>
  102. /// <typeparam name="Response"></typeparam>
  103. /// <typeparam name="Request"></typeparam>
  104. /// <param name="apiurl"></param>
  105. /// <param name="method"></param>
  106. /// <param name="t"></param>
  107. /// <returns></returns>
  108. public async static Task<dynamic> PostDataAsync<Response, Request>(string apiurl, string method, Request t, int timeout = 3000)
  109. {
  110. var josnString = JsonConvert.SerializeObject(t);
  111. HttpContent httpContent = new StringContent(josnString);
  112. httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  113. HttpClient httpClient = new HttpClient
  114. {
  115. BaseAddress = new Uri(apiurl),
  116. Timeout = TimeSpan.FromMilliseconds(timeout)
  117. };
  118. using (var response = await httpClient.PostAsync(method, httpContent))
  119. {
  120. if (response.IsSuccessStatusCode)
  121. {
  122. Task<string> reslut = response.Content.ReadAsStringAsync();
  123. var modlist = JsonConvert.DeserializeObject<Response>(reslut.Result);
  124. return modlist;
  125. }
  126. }
  127. return null;
  128. }
  129. /// <summary>
  130. ///
  131. /// </summary>
  132. /// <typeparam name="T"></typeparam>
  133. /// <param name="apiurl"></param>
  134. /// <param name="method"></param>
  135. /// <param name="content"></param>
  136. /// <param name="timeout"></param>
  137. /// <returns></returns>
  138. public async static Task<dynamic> PostDataAsync<T>(string apiurl, string method, HttpContent content, int timeout = 3000)
  139. {
  140. HttpClient client = new HttpClient
  141. {
  142. BaseAddress = new Uri(apiurl),
  143. Timeout = TimeSpan.FromMilliseconds(timeout)
  144. };
  145. using (var response = await client.PostAsync(method, content))
  146. {
  147. var reslut = await response.Content.ReadAsAsync<T>();
  148. return reslut;
  149. }
  150. }
  151. }
  152. }