ApiClient.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #region << 版本注释-v1 >>
  2. /*
  3. * ========================================================================
  4. * 版本:v1
  5. * 时间:2020-04-03
  6. * 说明:
  7. * ========================================================================
  8. */
  9. #endregion
  10. using ServiceAdaptor.NetCore.Client;
  11. using System.Collections.Generic;
  12. using System.Threading.Tasks;
  13. using Vit.Core.Util.Net;
  14. using Vit.Extensions;
  15. namespace ServiceAdaptor.NetCore.MinHttp
  16. {
  17. public class ApiClient : IApiClient
  18. {
  19. public readonly HttpClient vitHttpClient = new HttpClient();
  20. public List<IApiEvent> apiEvents { get; set; }
  21. #region CallApi
  22. /// <summary>
  23. ///
  24. /// </summary>
  25. /// <typeparam name="ReturnType"></typeparam>
  26. /// <param name="req"></param>
  27. /// <returns></returns>
  28. public virtual ApiResponse<ReturnType> CallApi<ReturnType>(ApiRequest req)
  29. {
  30. //(x.0)BeforeCallApi
  31. var apiResponse = this.BeforeCallApi<ReturnType>(req).Result;
  32. if (apiResponse != null) return apiResponse;
  33. var request = new HttpRequest { url = req.url, body = req.arg, httpMethod = req.httpMethod, headers = req.headers };
  34. if (request.body != null && request.httpMethod == "GET")
  35. {
  36. request.url = HttpClient.UrlAddParams(request.url, request.body);
  37. request.body = null;
  38. }
  39. var response = vitHttpClient.Send<ReturnType>(request);
  40. if (response == null)
  41. {
  42. return null;
  43. }
  44. return new ApiResponse<ReturnType> { StatusCode= response.StatusCode,data= response.data,headers= response.headers};
  45. }
  46. /// <summary>
  47. ///
  48. /// </summary>
  49. /// <typeparam name="ReturnType"></typeparam>
  50. /// <param name="req"></param>
  51. /// <returns></returns>
  52. public virtual async Task<ApiResponse<ReturnType>> CallApiAsync<ReturnType>(ApiRequest req)
  53. {
  54. //(x.0)BeforeCallApi
  55. var apiResponse = this.BeforeCallApi<ReturnType>(req).Result;
  56. if (apiResponse != null) return apiResponse;
  57. var request = new HttpRequest { url = req.url, body = req.arg, httpMethod = req.httpMethod, headers = req.headers };
  58. if (request.body != null && request.httpMethod == "GET")
  59. {
  60. request.url = HttpClient.UrlAddParams(request.url, request.body);
  61. request.body = null;
  62. }
  63. var response = await vitHttpClient.SendAsync<ReturnType>(request);
  64. if (response == null)
  65. {
  66. return null;
  67. }
  68. return new ApiResponse<ReturnType> { StatusCode = response.StatusCode, data = response.data, headers = response.headers };
  69. }
  70. #endregion
  71. }
  72. }