如何将HTTP响应转发给客户端

Fra*_*bem 2 c# asp.net-core asp.net-core-webapi

我有一个客户端(Xamarin)和两个Web API服务器A和B.客户端向A发出请求,使用请求参数向B发出另一个请求.如何将A从B接收的响应返回给客户端B使用C对客户来说是透明的.

例如,如果我使用HttpClient如何HttpResponseMessage在控制器的操作中转发到客户端,从A到B发出请求?

Ily*_*kov 6

查看Microsoft ASP.NET Core Proxy存储库以获取透明HTTP代理的一个很好的示例.此代理是一个中间件,处理客户端对A的请求并向B发出自己的请求.

为了提供完整的答案,这是其源代码的一部分,实际上是转发HttpResponseMessage:

using (var responseMessage = await _httpClient.SendAsync(
    requestMessage, HttpCompletionOption.ResponseHeadersRead, context.RequestAborted))
{
    context.Response.StatusCode = (int)responseMessage.StatusCode;
    foreach (var header in responseMessage.Headers)
    {
        context.Response.Headers[header.Key] = header.Value.ToArray();
    }

    foreach (var header in responseMessage.Content.Headers)
    {
        context.Response.Headers[header.Key] = header.Value.ToArray();
    }

    // SendAsync removes chunking from the response. This removes the header so it doesn't expect a chunked response.
    context.Response.Headers.Remove("transfer-encoding");
    await responseMessage.Content.CopyToAsync(context.Response.Body);
}
Run Code Online (Sandbox Code Playgroud)

从2019年更新:在原始答案发布后,代理完全重新设计.这是更新的代码复制接收HttpResponseMessageHttpContext.Response.此外,整个项目稍后存档.检查存储库自述文件以获取有关正在进行的开发的更多信息