QTUtils.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Threading.Tasks;
  6. using System.Web;
  7. using Wicture.DbRESTFul;
  8. namespace JiaZhiQuan.Common.Utils
  9. {
  10. public class QTUtils
  11. {
  12. const string BASE_URL = "http://qt.olssglobal.com/api/";
  13. public static async Task<T> GetAKSData<T>(IHttpClientFactory httpClientFactory, string api, object queryData = null, int retryCount = 0)
  14. {
  15. string url = BASE_URL + api + (queryData == null ? "" : "?" + ToUrlParams(queryData));
  16. try
  17. {
  18. using var httpClient = httpClientFactory.CreateClient();
  19. var rst = await httpClient.GetStringAsync(url);
  20. return JsonConvert.DeserializeObject<T>(rst);
  21. }
  22. catch (Exception ex)
  23. {
  24. if (retryCount < 1)
  25. {
  26. LoggerManager.Logger.Error(ex, $"请求失败:【{url}】" + ex.Message);
  27. throw ex;
  28. }
  29. await Task.Delay(2000);
  30. return await GetAKSData<T>(httpClientFactory, api, queryData, --retryCount);
  31. }
  32. }
  33. public static string ToUrlParams(object obj)
  34. {
  35. return string.Join("&",
  36. obj.GetType().GetProperties().Where(x => x.GetValue(obj) != null).Select(x =>
  37. $"{x.Name}={HttpUtility.UrlEncode(x.GetValue(obj, null).ToString())}"));
  38. }
  39. }
  40. }