ReverseProxyHttpHandler.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Net;
  3. using System.Net.Http;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. namespace FastGithub.Upgrade
  7. {
  8. /// <summary>
  9. /// 本机反向代理的httpHandler
  10. /// </summary>
  11. sealed class ReverseProxyHttpHandler : DelegatingHandler
  12. {
  13. /// <summary>
  14. /// 本机反向代理的httpHandler
  15. /// </summary>
  16. public ReverseProxyHttpHandler()
  17. {
  18. this.InnerHandler = new HttpClientHandler();
  19. }
  20. /// <summary>
  21. /// 替换为Loopback
  22. /// </summary>
  23. /// <param name="request"></param>
  24. /// <param name="cancellationToken"></param>
  25. /// <returns></returns>
  26. protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
  27. {
  28. var uri = request.RequestUri;
  29. if (uri != null && uri.HostNameType == UriHostNameType.Dns)
  30. {
  31. var domain = uri.Host;
  32. var builder = new UriBuilder(uri) { Host = IPAddress.Loopback.ToString() };
  33. request.RequestUri = builder.Uri;
  34. request.Headers.Host = domain;
  35. }
  36. return await base.SendAsync(request, cancellationToken);
  37. }
  38. }
  39. }