TrClient.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System.Net.Http.Json;
  2. using System.Text.Json;
  3. using Microsoft.Extensions.Logging;
  4. using RestSharp;
  5. namespace Tr.Sdk;
  6. public class TrClient : ITrClient, IDisposable
  7. {
  8. private RestClient _client;
  9. private readonly string _baseUrl;
  10. private readonly string _apiKey;
  11. private readonly string _apiSecret;
  12. public TrClient(string baseUrl, string apiKey, string apiSecret)
  13. {
  14. _baseUrl = baseUrl;
  15. _apiKey = apiKey;
  16. _apiSecret = apiSecret;
  17. var options = new RestClientOptions(baseUrl)
  18. {
  19. Authenticator = new TrAuthenticator(baseUrl, apiKey, apiSecret)
  20. };
  21. _client = new RestClient(options);
  22. }
  23. /// <summary>
  24. /// 执行操作呼叫中心请求
  25. /// </summary>
  26. /// <typeparam name="TRequest"></typeparam>
  27. /// <typeparam name="TResponse"></typeparam>
  28. /// <param name="request"></param>
  29. /// <param name="cancellationToken"></param>
  30. /// <returns></returns>
  31. public async Task<TResponse> ExecuteAsync<TRequest, TResponse>(TRequest request, CancellationToken cancellationToken)
  32. where TRequest : TrRequest
  33. {
  34. var req = new RestRequest(request.Path(), request.HttpMethod())
  35. .AddObject(request);
  36. string url = "http://222.213.23.229:29003/api/ola/queues/10010/get-callers";
  37. try
  38. {
  39. var response = await _client.ExecuteAsync<TResponse>(req, cancellationToken);
  40. if (response?.StatusCode == System.Net.HttpStatusCode.Unauthorized)
  41. {
  42. _client.Dispose();
  43. var options = new RestClientOptions(_baseUrl)
  44. {
  45. Authenticator = new TrAuthenticator(_baseUrl, _apiKey, _apiSecret)
  46. };
  47. _client = new RestClient(options);
  48. response = await _client.ExecuteAsync<TResponse>(req, cancellationToken);
  49. }
  50. if (!response?.IsSuccessful ?? false)
  51. throw new HttpRequestException($"请求呼叫中心服务失败, HttpCode: {response.StatusCode}, Error: {response.ErrorMessage}");
  52. return response.Data;
  53. }
  54. catch (Exception e)
  55. {
  56. throw new HttpRequestException($"呼叫中心请求失败,Error: {e.Message}");
  57. }
  58. }
  59. /// <summary>
  60. /// 执行操作呼叫中心请求
  61. /// </summary>
  62. /// <typeparam name="TRequest"></typeparam>
  63. /// <param name="request"></param>
  64. /// <param name="cancellationToken"></param>
  65. /// <returns></returns>
  66. /// <exception cref="HttpRequestException"></exception>
  67. public async Task ExecuteAsync<TRequest>(TRequest request, CancellationToken cancellationToken)
  68. where TRequest : TrRequest
  69. {
  70. var req = new RestRequest(request.Path(), request.HttpMethod())
  71. .AddObject(request);
  72. try
  73. {
  74. var response = await _client.ExecuteAsync(req, cancellationToken);
  75. if (!response?.IsSuccessful ?? false)
  76. throw new HttpRequestException($"请求呼叫中心服务失败, HttpCode: {response.StatusCode}, Error: {response.ErrorMessage}");
  77. }
  78. catch (Exception e)
  79. {
  80. throw new HttpRequestException($"呼叫中心请求失败,Error: {e.Message}");
  81. }
  82. }
  83. /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
  84. public void Dispose()
  85. {
  86. _client?.Dispose();
  87. GC.SuppressFinalize(this);
  88. }
  89. }