Asp.NET Core - 尝试一下在NET9中使用Yarp作为Api Proxy

1.简单介绍

Yarp是Yet another reverse proxy的简写,是微软开源的一个用.NET开发的reverse proxy(反向代理),为后端的Api提供路由,负载均衡,身份认证等功能,支持高度定制化。当前在微软推出的Aspire中,有的地方也有用到。Yarp的开源仓库地址是https://github.com/microsoft/reverse-proxy

这边尝试一下使用Yarp作为Api proxy的功能

2.具体说明

假定当前已经有了两个Api,其中一个提供巴黎奥运会的各个国家的奖牌数据,另外一个提供各大洲的奖牌数据,

Web Api 01 - http://localhost:5039/api/OlympicsMetalsByContinent

Web Api 02 - http://localhost:5039/api/olympics2024

这两个Web Api是基于.NET 9 Asp.Net Core WebApi项目创建的,Web Api 02 是 Mininal Api

数据访问使用的是 Microsoft EntityFrameworkCore 9.0,巴黎奥运会的数据存放于SQLServer中。

2.1 制作Yarp Proxy项目

这边创建的Yarp Proxy项目是Minimal Api

2.1.1 创建项目

可以在Visual Studio中 创建项目,也可以使用命令进行创建

dotnet new web -n YarpProxy

2.1.2 添加 Yarp package
2.1.3 Yarp Proxy的代码部分
  1. 添加Yarp Proxy中间件

    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddReverseProxy()
    .LoadFromMemory((IReadOnlyList<RouteConfig>)GetRoutes(), (IReadOnlyList<ClusterConfig>)GetClusters());
    var app = builder.Build();
    app.MapReverseProxy();
    app.Run();

  2. 配置Route及Route匹配规则

  1. 配置路由的目标

2.2 运行一下

假定YarpProxy项目的Web Api地址是 http://localhost:5039/,则路由的对应关系是

Web Api 01 - 获取各大洲的奥运会数据

源:http://localhost:5039/api/OlympicsMetals/ContinentData

目标: http://localhost:5032/api/OlympicsMetals/ContinentData

访问一下Api,数据获取结果如下图所示,

Web Api 02 - 获取各个国家的奥运会数据

源: http://localhost:5039/api/olympics2024

目标: http://localhost:5209/api/olympics2024

通过Yarp proxy,后端的api就集中到了http://localhost:5039 这个统一的地址来了,后续还可以配置Authentication, load balance等其他的功能的。

3.总结

本文简单介绍了一下使用微软开源的Yarp作为Api Proxy的操作过程,通过Yarp proxy,这样就不需要记住后端不同Web Api的endpoint了,可以通过统一的地址进行访问。这两年微软推出的.NET Aspire技术也可以以DNS名字的形式来访问不同的Web API。.NET Aspire在实现Blazor Web Assembly与Open ID Connect集成的时候,也会使用到Yarp,后续也尝试一下这一块。

本文如果哪里由错误的地方,麻烦告之,谢谢!

相关推荐
程序员敲代码吗6 小时前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
缺点内向7 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
喵叔哟8 小时前
06-ASPNETCore-WebAPI开发
服务器·后端·c#
2501_930707788 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
初级代码游戏9 小时前
套路化编程 C# winform 自适应缩放布局
开发语言·c#·winform·自动布局·自动缩放
大空大地202610 小时前
流程控制语句--switch多分支语句使用、while循环语句的使用、do...while语句、for循环
c#
kylezhao201912 小时前
C#序列化与反序列化详细讲解与应用
c#
JQLvopkk12 小时前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
故事不长丨12 小时前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
kingwebo'sZone12 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word