2017-01-13 4 views
0

Ich muss den folgenden Code von Java zu C# konvertieren, wenn ich restAPI in C# verwende.Konvertieren von GetEntity(). GetContent() von Java zu C#

in Java:

HttpGet statusGet = new HttpGet(fileUrl); 
    statusGet.setHeader("X-API-TOKEN", API_TOKEN); 
HttpResponse response = httpClient.execute(statusGet); 

    // Extract exported file 
    ZipInputStream zs = new ZipInputStream(response.getEntity().getContent()); 

In C# ist das, was ich habe.

  var client1 = new RestClient(fileUrl); 
      var request1 = new RestRequest(Method.GET); 
      request1.AddHeader("X-API-TOKEN", "API_TOKEN"); 
      request1.AddHeader("content-type", "application/json"); 
      request1.AddParameter("application/json", "{\n\t\"format\" : \"csv\",\n\t\"surveyId\" : \"_surveyId\"\n}", ParameterType.RequestBody); 
      IRestResponse responsedata = client1.Execute(request1); 

var download=client1.DownloadData(request1); 
MemoryStream stream = new MemoryStream(download); 
ZipInputStream zs = new ZipInputStream(stream); 
using (ZipFile zip1 = ZipFile.Read(zs)) 

Ich habe keine Ahnung, wie response.getEntity zu implementieren() getContent(). Ich glaube, es ist der Stream (mit einer Zip-Datei?) Aktualisiert: So bekomme ich die Byte-Array von client1.DownloadData (request1), sieht aus wie es nicht richtig ist, es in Strom zu konvertieren (hat Readtimeout Ausnahme). und es kann nicht aus zipfile.read lesen Vielen Dank für Ihre Hilfe

Antwort

0

Erhalten Sie bestimmte Fehler? Es sieht so aus, als ob Sie dies unter Verwendung von RestSharp implementieren. Haben Sie ihre Beispiele verfolgt und ihre Dokumentation gelesen?

Ich persönlich habe nicht diese Lösung von Drittanbietern verwendet, aber sofort auf ihrer Titelseite sie haben das folgende Beispiel, das genau das tut, was Sie zu tun versuchen:

var client = new RestClient("http://example.com"); 
// client.Authenticator = new HttpBasicAuthenticator(username, password); 

var request = new RestRequest("resource/{id}", Method.POST); 
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method 
request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource 

// easily add HTTP Headers 
request.AddHeader("header", "value"); 

// add files to upload (works with compatible verbs) 
request.AddFile(path); 

// execute the request 
IRestResponse response = client.Execute(request); 
var content = response.Content; // raw content as string 

// or automatically deserialize result 
// return content type is sniffed but can be explicitly set via RestClient.AddHandler(); 
RestResponse<Person> response2 = client.Execute<Person>(request); 
var name = response2.Data.Name; 

// easy async support 
client.ExecuteAsync(request, response => { 
    Console.WriteLine(response.Content); 
}); 

// async with deserialization 
var asyncHandle = client.ExecuteAsync<Person>(request, response => { 
    Console.WriteLine(response.Data.Name); 
}); 

// abort the request on demand 
asyncHandle.Abort(); 

Es sieht als ob Sie auf die IRestResponse.Content-Eigenschaft zugreifen oder mit der RestClient.Execute<T>(RestRequest request)-Funktion deserialisieren möchten.

+0

Ja. Du liegst absolut richtig. Mir wurde gesagt, dass es eine Zip-Datei zurückgeben wird. Ich nehme an, dass IRestResponse.Content eine Zip-Datei enthält? Aber es ist gerade wie eine Schnur. Denkst du ich kann das deserialisieren? Danke gmiley – shakedong93

+0

Nein, Sie würden wahrscheinlich nur den Inhalt als String verwenden und ihn als Datei in Ihr Dateisystem schreiben, indem Sie Klassen/Funktionen im 'System.IO' Namespace verwenden. Sie deserialisieren nur zu einer Klasse, wenn Sie eine Klasse erwarten. Wenn Sie Dateiinhalte erhalten, erhalten Sie diese normalerweise als "String" oder möglicherweise als "Stream". – gmiley

+0

@ shakedong93 hat diese Antwort helfen, Ihr Problem zu klären? – gmiley