2016-04-18 42 views
0

我試圖消耗外部API的第三方API響應,但返回的數據分塊:傳分塊通過的WebAPI控制器

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的statusCode。 有誰知道我如何讓我的控制器返回分塊的數據?

回答

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; 

但我不會那樣做,因爲你再無法控制其頭部和身體的值你的AP我將從第三方API泄漏。