HttpClient.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using System.Net.Http;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace FastGithub.ReverseProxy
  6. {
  7. /// <summary>
  8. /// YARP的HttpClient
  9. /// </summary>
  10. class HttpClient : HttpMessageInvoker
  11. {
  12. private readonly bool tlsSni;
  13. /// <summary>
  14. /// YARP的HttpClient
  15. /// </summary>
  16. /// <param name="handler"></param>
  17. /// <param name="disposeHandler"></param>
  18. /// <param name="tlsSni"></param>
  19. public HttpClient(HttpMessageHandler handler, bool disposeHandler, bool tlsSni) :
  20. base(handler, disposeHandler)
  21. {
  22. this.tlsSni = tlsSni;
  23. }
  24. /// <summary>
  25. /// 发送数据
  26. /// </summary>
  27. /// <param name="request"></param>
  28. /// <param name="cancellationToken"></param>
  29. /// <returns></returns>
  30. public override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
  31. {
  32. var isHttps = request.RequestUri?.Scheme == Uri.UriSchemeHttps;
  33. request.SetSniContext(new SniContext(isHttps, this.tlsSni));
  34. return base.SendAsync(request, cancellationToken);
  35. }
  36. }
  37. }