通过 WebAPI 控制器传递分块的第三方 API 响应

Passing chunked third-party API response through a WebAPI controller

我正在尝试使用外部 API 但 returned 的数据被分块了:

Cache-control: max-age=7200
Content-Type: text/xml;charset=UTF-8
Vary: Accept-Encoding
P3P: CP="Anything"
ApacheTracking: localhost
Transfer-Encoding: chunked

这是我的问题。我可以在 Fiddler 中看到数据,但是当尝试从 WebAPI 项目中 return 来自 Controller 的数据时,什么都不是 return编辑。我的代码如下所示:

// Try to get our products
using (var client = new HttpClient())
{
    var response = await client.GetAsync(signedUrl);

    return Ok(response);
}

但客户端应用程序没有数据。不过,它 return 的 statusCode 为 200。 有谁知道如何让我的控制器 return 分块数据?

您不需要 re-assemble body,HttpClient 会为您完成此操作。

尽管如此,您确实需要阅读响应 body,因为现在您正在尝试序列化一个 HttpResponseMessage,这并不是真正的目的。

根据您实际想要 return 给客户端的内容,引入您自己的数据传输 Object,或者只是 return 一个字符串:

using (var client = new HttpClient())
{
    var response = await client.GetAsync(signedUrl);

    var responseBody = await response.Content.ReadAsStringAsync();

    return Ok(responseBody);
}

或者,如果您的 API 方法具有 return 类型的 Task<HttpResponseMessage>,您可以 return 直接调用 API 的响应(没有将其包装在 Ok() 中,这将进行序列化):

return response;

但我不会那样做,因为这样你就无法控制 API 的 header 和 body 值会从 third-party API.