我正在尝试使用外部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。 有谁知道如何让我的控制器返回分块数据?
答案 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泄漏的标头和正文值。