ApiRequestService.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using Flurl.Http;
  2. using IMCS.CCS.Entitys;
  3. using Microsoft.Extensions.Logging;
  4. using System;
  5. using System.Threading.Tasks;
  6. namespace IMCS.CCS.Service.Impl
  7. {
  8. /// <summary>
  9. /// WebApi 请求服务
  10. /// </summary>
  11. public class ApiRequestService : IApiRequestService
  12. {
  13. private readonly ILogger<IApiRequestService> _logger;
  14. public ApiRequestService(ILogger<IApiRequestService> logger)
  15. {
  16. _logger = logger;
  17. }
  18. /// <summary>
  19. /// 请求数据
  20. /// </summary>
  21. /// <param name="requsetMode"></param>
  22. /// <param name="apiUrl"></param>
  23. /// <param name="headerKeyValue"></param>
  24. /// <returns></returns>
  25. public async Task<(bool IsSuccess, string Message)> RequestAsync(RequsetModeEnum requsetMode, string apiUrl, object obj, string headerKeyValue = null)
  26. {
  27. try
  28. {
  29. var headerKey = "IMCS_CCS.Job.Request";
  30. var headerValue = "Success";
  31. if (!string.IsNullOrWhiteSpace(headerKeyValue) && headerKeyValue.Contains("="))
  32. {
  33. headerKey = headerKeyValue.Split('=')[0];
  34. headerValue = headerKeyValue.Split('=')[1];
  35. }
  36. IFlurlRequest flurlRequest = apiUrl.WithHeader(headerKey, headerValue).WithTimeout(16) ;
  37. if (flurlRequest == null)
  38. {
  39. return (false, "flurlRequest 空指针!");
  40. }
  41. IFlurlResponse flurResponse = default;
  42. if (requsetMode == RequsetModeEnum.Delete)
  43. {
  44. flurResponse = await flurlRequest.DeleteAsync();
  45. }
  46. if (requsetMode == RequsetModeEnum.Post)
  47. {
  48. if(obj == null)
  49. {
  50. flurResponse = await flurlRequest.PostAsync();
  51. }
  52. else
  53. {
  54. flurResponse = await apiUrl.PostJsonAsync(obj);
  55. }
  56. }
  57. if (requsetMode == RequsetModeEnum.Get)
  58. {
  59. flurResponse = await flurlRequest.GetAsync();
  60. }
  61. if (flurResponse == null)
  62. {
  63. return (false, "flurResponse 空指针!");
  64. }
  65. var result = await flurResponse.GetStringAsync();
  66. if (string.IsNullOrWhiteSpace(result))
  67. {
  68. return (false, "result 空指针!");
  69. }
  70. return (true, result);
  71. }
  72. catch (FlurlHttpTimeoutException ex)
  73. {
  74. _logger.LogError(ex, $"接口请求超时【ApiRequestService 》RequestAsync】:{ex.Message}");
  75. return (false, ex.Message);
  76. }
  77. catch (FlurlHttpException ex)
  78. {
  79. _logger.LogError(ex, $"接口请求失败【ApiRequestService 》RequestAsync】:{ex.Message}");
  80. return (false, ex.Message);
  81. }
  82. catch (Exception ex)
  83. {
  84. _logger.LogError(ex, $"接口请求异常【ApiRequestService 》RequestAsync】:{ex.Message}");
  85. return (false, ex.Message);
  86. }
  87. }
  88. }
  89. }