Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

129 lines
4.5KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net.Http.Headers;
  5. using System.Net.Security;
  6. using System.Net;
  7. using System.Security.Cryptography.X509Certificates;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Newtonsoft.Json;
  11. using Microsoft.Extensions.Logging;
  12. namespace NearCardAttendance.Common.helper
  13. {
  14. public class HttpHelper
  15. {
  16. private readonly IHttpClientFactory _httpClientFactory;
  17. private readonly ILogger<HttpHelper> _logger;
  18. public HttpHelper(IHttpClientFactory httpClientFactory, ILogger<HttpHelper> logger)
  19. {
  20. _httpClientFactory = httpClientFactory;
  21. _logger = logger;
  22. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult!);
  23. }
  24. public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
  25. {
  26. return true;
  27. }
  28. public async Task<string?> HttpToGetAsync(string url)
  29. {
  30. return await HttpToGetAsync(url, new List<KeyValuePair<string, string>>());
  31. }
  32. public async Task<string?> HttpToGetAsync(string url, List<KeyValuePair<string, string>> headers)
  33. {
  34. var client = _httpClientFactory.CreateClient(Consts.DEFAULT_HTTPCLIENT_NAME);
  35. if (headers != null && headers.Count > 0) //指定请求头
  36. {
  37. headers.ForEach(e =>
  38. {
  39. client.DefaultRequestHeaders.Add(e.Key, e.Value);
  40. });
  41. }
  42. try
  43. {
  44. using (var response = await client.GetAsync(url).ConfigureAwait(false))
  45. {
  46. if (!response.IsSuccessStatusCode) return null;
  47. else
  48. {
  49. var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
  50. return result;
  51. }
  52. }
  53. }
  54. catch (Exception ex)
  55. {
  56. _logger.LogError($"HttpToGetAsync发生异常, Msg:{ex.Message}\n{ex.StackTrace}");
  57. return null;
  58. }
  59. }
  60. public async Task<string?> HttpToPostAsync(string url, object data)
  61. {
  62. return await HttpToPostAsync(url, data, new List<KeyValuePair<string, string>>());
  63. }
  64. public async Task<string?> HttpToPostAsync(string url, object data, List<KeyValuePair<string, string>> headers)
  65. {
  66. if (data == null) return null;
  67. var client = _httpClientFactory.CreateClient(Consts.DEFAULT_HTTPCLIENT_NAME);
  68. if (headers != null && headers.Count > 0) //指定请求头
  69. {
  70. headers.ForEach(e =>
  71. {
  72. client.DefaultRequestHeaders.Add(e.Key, e.Value);
  73. });
  74. }
  75. string? body;
  76. if (data is string) body = data as string;
  77. else body = JsonConvert.SerializeObject(data);
  78. try
  79. {
  80. using (var content = new StringContent(body!))
  81. {
  82. content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  83. using (var response = await client.PostAsync(url, content).ConfigureAwait(false))
  84. {
  85. if (!response.IsSuccessStatusCode) return null;
  86. else
  87. {
  88. var result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
  89. return result;
  90. }
  91. }
  92. }
  93. }
  94. catch (Exception ex)
  95. {
  96. _logger.LogError($"HttpToPostAsync发生异常, Msg:{ex.Message}\n{ex.StackTrace}");
  97. return null;
  98. }
  99. }
  100. /// <summary>
  101. /// Authorization 的 Base64 加密
  102. /// </summary>
  103. /// <param name="username"></param>
  104. /// <param name="password"></param>
  105. /// <returns></returns>
  106. public string GetEncodedCredentials(string username, string password)
  107. {
  108. string mergedCredentials = string.Format("{0}:{1}", username, password);
  109. byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
  110. return Convert.ToBase64String(byteCredentials);
  111. }
  112. }
  113. }