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

时间:2016-04-18 13:59:35

标签: asp.net-web-api transfer-encoding

我正在尝试使用外部API,但返回的数据是分块的:

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项目中的控制器返回数据时,不会返回任何内容。我的代码如下所示:

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

    return Ok(response);
}

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

1 个答案:

答案 0 :(得分:1)

你不需要重新组装身体,HttpClient会为你做这件事。

您确实需要阅读响应正文,因为现在您正在尝试序列化HttpResponseMessage,而这并不是真正的意思。

根据您实际想要返回客户端的内容,引入您自己的数据传输对象,或者只返回一个字符串:

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

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

    return Ok(responseBody);
}

或者,如果您的API方法的返回类型为Task<HttpResponseMessage>,则可以直接返回API调用的响应(不将其包含在Ok()中,这将执行serialziation):

return response;

但是我不这样做,因为你无法控制你的API从第三方API泄漏的标头和正文值。