Передать запрос другому API - PullRequest
0 голосов
/ 23 октября 2019

При наличии ASP.NET Core Web API, если я получаю запрос к одной из конечных точек:

Q: Как я могу передать (отправить) тот же запрос другому внешнемуAPI? Вся информация запроса (заголовки, тело, параметры поиска и т. Д.) Должна быть сохранена.

Q: Есть ли способ сделать это, не восстанавливая весь запрос с помощью HttpClient? Если нет, есть ли инструмент / библиотека, которая может прочитать HttpContext и восстановить запрос, используя HttpClient?

Я также хотел бы иметь возможность выполнять некоторые операции между запросами.

1 Ответ

1 голос
/ 23 октября 2019

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

Если, с другой стороны, вы хотите перенаправить ваш запрос из действия контроллера, вам придется скопировать запрос.

...