YARP框架中,核心处理类是IHttpProxy,其接口定义如下:

Task ProxyAsync(HttpContext context, string destinationPrefix, HttpMessageInvoker httpClient, RequestProxyOptions requestOptions, HttpTransformer transformer)

从它的接口定义基本可以看出它的功能:从 HttpContext 创建 Http 查询信息、发送到目标地址,并将响应结果写会HttpContext。

IhttpProxy特点如下:

  1. 灵活,能根据请求动态选择代理目标
  2. 强大,能修改http请求和响应的头
  3. 支持gRPC或WebSockets这种流式协议
  4. 支持异常处理

它简单灵活,本身是一个反向代理的功能类的。 用它本身是可以非常简单的实现一个反向代理功能的。代码如下: 

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddHttpProxy();
 4 }
 5 
 6 public void Configure(IApplicationBuilder app, IHttpProxy httpProxy)
 7 {
 8     var httpClient = new HttpMessageInvoker(new SocketsHttpHandler()
 9     {
10         UseProxy = false,
11         AllowAutoRedirect = false,
12         AutomaticDecompression = DecompressionMethods.None,
13         UseCookies = false
14     });
15     var transformer = new CustomTransformer(); // or HttpTransformer.Default;
16     var requestOptions = new RequestProxyOptions { Timeout = TimeSpan.FromSeconds(100) };
17 
18     app.UseRouting();
19     app.UseAuthorization();
20     app.UseEndpoints(endpoints =>
21     {
22         endpoints.Map("/{**catch-all}", async httpContext =>
23         {
24             await httpProxy.ProxyAsync(httpContext, "https://localhost:10000/", httpClient,
25                 requestOptions, transformer);
26 
27             var errorFeature = httpContext.GetProxyErrorFeature();
28             if (errorFeature != null)
29             {
30                 var error = errorFeature.Error;
31                 var exception = errorFeature.Exception;
32             }
33         });
34     });
35 }
View Code

相关文章:

  • 2021-11-29
  • 2022-12-23
  • 2021-06-16
  • 2021-10-25
  • 2021-09-01
  • 2021-03-27
  • 2021-07-31
  • 2021-10-16
猜你喜欢
  • 2021-10-27
  • 2021-11-29
  • 2022-12-23
  • 2021-07-21
  • 2022-12-23
  • 2021-10-16
  • 2021-07-12
相关资源
相似解决方案