asp.net 核心代理/网关服务

问题描述 投票:0回答:1

我是 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;
    }

这是正确的还是我做错了什么?实现此功能的最佳方式是什么?

asp.net-core asp.net-core-webapi
1个回答
0
投票

满足您要求的产品已经存在,您可以查看这个文档:用Ocelot实现API网关

默认在json文件中记录重路由信息,如果你想自己实现gateway app,也可以考虑将相关信息存储在配置文件中,这里是asp.net core配置相关的文档

© www.soinside.com 2019 - 2024. All rights reserved.