0

我正在尝试使用外部 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);
}

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

4

1 回答 1

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(),这将进行序列化):

return response;

但我不会那样做,因为您无法控制您的 API 将从第三方 API 泄​​漏哪些标头和正文值。

于 2016-04-18T14:06:45.180 回答