通过 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.
我正在尝试使用外部 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.