我是 asp.net core 的新手,我会问我的理解是否正确。所以,我有一些 REST API——api-1 和 url-1,api-2 和 url-2 ... api-n 和 url-n。我需要一个像开关一样工作的微服务,它检查查询字符串并从这些 api-1 中选择一个到 api-n,将所有标头、查询字符串、正文发送到 api-* 并返回其响应。
我的理解是我需要一个中间件来做这个。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseMiddleware<GatewayMiddleware>();
app.Run();
我可以像
InvokeAsync
一样做我所有的员工
public async Task InvokeAsync(HttpContext context)
{
var url = GetApiUrlFromQuery(context.Request.QueryString);
var method = GetHttpMethod(context.Request.Method);
var httpClient = new HttpClient();
var request = new HttpRequestMessage(method, url);
// somehow set headers and context
//request.Headers = context.Request.Headers;
//request.Content = context.Request.HttpContext;
var response = await httpClient.SendAsync(request);
// somehow return response
//context.Response = response;
}
这是正确的还是我做错了什么?实现此功能的最佳方式是什么?
满足您要求的产品已经存在,您可以查看这个文档:用Ocelot实现API网关
默认在json文件中记录重路由信息,如果你想自己实现gateway app,也可以考虑将相关信息存储在配置文件中,这里是asp.net core配置相关的文档