2017-02-23 3 views
0

Ich schreibe eine WP8.1-App, die Daten über die REST-API liest und sendet. Alle von ihnen funktionieren ohne Probleme, ausgenommen die "Suche".HttpClient erreicht keine URL

Diese API funktioniert in POST und ich muss eine Zeichenfolge im JSON-Format senden, die meine Abfrage definiert. Wenn ich nur wenige Filter festlege, dauert das Reagieren der REST-API zu lange. Daher hat das HttpResponseMessage-Objekt keinen Erfolgscode und es wird eine "NotFound" -Nachricht zurückgegeben, selbst wenn die Web-API korrekt ausgeführt wird.

Wenn ich die gleiche Anfrage über Postman versuche, funktioniert es richtig, aber wenn ich es über SoapUi versuche, erhalte ich eine "java.net.SocketTimeoutException: Gelesene Zeit überschritten" Fehlermeldung.

In SoapUi habe ich es geschafft, das Timeout zu verlängern, um eine Antwort zu bekommen, aber mein C# -Code funktioniert nicht, selbst wenn ich die TimeOut-Eigenschaft auf das HttpClient-Objekt setze.

Kann mir bitte jemand helfen, mein Problem zu lösen? Danke!

EDIT Der Code ist wirklich einfach:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(baseAddress); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
client.DefaultRequestHeaders.ExpectContinue = false; 
client.Timeout = TimeSpan.FromSeconds(300); 

HttpContent content = new StringContent(json, Encoding.Unicode, "application/json"); 
HttpResponseMessage response = await client.PostAsync(uri, content)); 

if (response.IsSuccessStatusCode) 
{ 
    string jsonResponse = await response.Content.ReadAsStringAsync(); 
} 
+1

Sie weitere Details liefern müssen, was Sie (Stück Code zum Beispiel) zu tun oder sonst wird es dificult sein, zu wissen, was das sein könnte Problem –

+0

@ElmerDantas Code hinzugefügt –

+0

versuchen, 'new StringContent (json.ToString(), Encoding.UTF8," application/json ");' ..try auch nur mit 'client.BaseAddress = neue Uri (baseAddress)' und ' client.DefaultRequestHeaders.Accept.Add (neuer MediaTypeWithQualityHeaderValue ("application/json")); 'properties. –

Antwort

0

Ich weiß, dass dies wird Ihnen nicht gefallen, aber haben Sie versucht, mit RestSharp? Aus irgendeinem Grund in diesem speziellen Szenario, wenn ich Informationen über POST senden muss, funktioniert HTTPClient nicht wie erwartet und die "Inhalt" Informationen, die es als Teil der URI anstelle des Körpers festgelegt ist.

Der equivalente Codeblock könnte wie folgt sein:

var client = new RestClient("http://example.com"); 
var request = new RestRequest("resource/{id}", Method.POST); 
request.AddParameter("name", "value"); 

// execute the request 
IRestResponse response = client.Execute(request); 

client.ExecuteAsync(request, response => { 
    Console.WriteLine(response.Content); 
}); 
+0

Ich habe einen Fehler versucht, RestSharp auf meinem Projekt zu installieren, der gleiche Fehler wie hier: [Link] (https://github.com/resharsh/RestSharp/issues/808) –

+0

müssen Sie dies installieren Bibliothek: RestSharp.Portable HttpClient von diesem Link: nuget.org/packages/FubarCoder.RestSharp.Portable –