将请求传递给另一个API

时间:2019-10-23 12:52:09

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

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

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

问:,有没有一种方法可以不必使用 const getUsers = async () => { const { users } = await axios.get(url); return users; }; const getCheckedUsers = async () => { const allUsers = await getUsers(); const promises = allUsers.then(users => { users.map(async user => { const { status } = await axios.get(another_url_that_takes_`user.id`); if (status === "204") { return user; } }); }); const results = await Promise.all(promises); return results; } 重构整个请求?如果没有,是否存在可以读取HttpClient并使用HttpContext重构请求的工具/库?

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

1 个答案:

答案 0 :(得分:1)

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

条件转发示例:

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();
    });
}

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