【问题标题】:Pass a request to another API将请求传递给另一个 API
【发布时间】:2019-10-23 21:18:04
【问题描述】:

给定一个 ASP.NET Core Web API,如果我收到对某个端点的请求:

问:如何将相同的请求传递(重新发送)到另一个外部 API?应保留所有请求信息(标头、正文、搜索参数等)。

问:有没有办法不用HttpClient重构整个请求?如果没有,是否有可以读取HttpContext 并使用HttpClient 重构请求的工具/库?

我还希望能够在请求之间进行一些操作。

【问题讨论】:

标签: c# asp.net-core .net-core asp.net-core-webapi


【解决方案1】:

ProxyKit 是一个 dotnet core 反向代理,允许您将请求转发到上游服务器,您还可以修改请求和响应。

条件转发示例:

public void Configure(IApplicationBuilder app)
{
    // Forwards the request only when the host is set to the specified value
    app.UseWhen(
        context => context.Request.Host.Host.Equals("api.example.com"),
        appInner => appInner.RunProxy(context => context
            .ForwardTo("http://localhost:5001")
            .AddXForwardedHeaders()
            .Send()));
}

修改请求示例:

public void Configure(IApplicationBuilder app)
{
    // Inline
    app.RunProxy(context =>
    {
        var forwardContext = context.ForwardTo("http://localhost:5001");
        if (forwardContext.UpstreamRequest.Headers.Contains("X-Correlation-ID"))
        {
            forwardContext.UpstreamRequest.Headers.Add("X-Correlation-ID", Guid.NewGuid().ToString());
        }
        return forwardContext.Send();
    });
}

另一方面,如果您想从控制器操作转发您的请求,则必须复制该请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 2021-08-24
    • 2015-09-21
    • 2020-11-22
    • 2016-05-12
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多