2016-04-18 9 views
0

Ich versuche, eine externe API zu konsumieren, sondern die Daten, die zurückgegeben wird, ist chunked:Passing chunked Dritt API-Antwort durch eine WebAPI Controller

Cache-control: max-age=7200 
Content-Type: text/xml;charset=UTF-8 
Vary: Accept-Encoding 
P3P: CP="Anything" 
ApacheTracking: localhost 
Transfer-Encoding: chunked 

, die mir Probleme verursacht. Ich kann die Daten in Fiddler sehen, aber wenn versucht wird, die Daten von einem Controller aus einem WebAPI-Projekt zurückzugeben, wird nichts zurückgegeben. Mein Code sieht so aus:

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

    return Ok(response); 
} 

aber die Clientanwendung hat keine Daten. Es gibt einen statusCode von 200 obwohl. Weiß jemand, wie ich meinen Controller bekommen kann, um die chunked Daten zurückzugeben?

Antwort

1

Sie müssen den Körper nicht erneut zusammenbauen, der HttpClient erledigt dies für Sie.

Sie müssen jedoch den Antworttext lesen, weil Sie jetzt versuchen, eine HttpResponseMessage zu serialisieren, für die es nicht wirklich gedacht ist.

Je nachdem, was Sie wollten tatsächlich an den Client zurück, Ihren eigenen Data Transfer Object einführen oder einfach einen String zurückgeben:

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

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

    return Ok(responseBody); 
} 

Alternativ, wenn Ihre API-Methode einen Rückgabetyp von Task<HttpResponseMessage> hat, Sie direkt könnte die Antwort des API-Aufrufs zurückgeben (ohne es in Ok() Verpackung, die die serialziation tun):

return response; 

Aber ich würde das nicht tun, weil Sie dann nicht, welche Kopf- und Körperwerte steuern Dein AP Ich werde die API von Drittanbietern verlassen.