2016-08-18 4 views
6

Wir haben einen Azure WebAPI Service, der manchmal eine BadRequest wie soStringContent ist leer auf Xamarin.Android

return BadRequest("{\"errors\":[{\"message\":\"MyBuddy not found!\",\"code\":9}]}"); 

Das Problem ist, dass auf Xamarin.Android zurückkehren können, die System.Net.Http.HttpClient verwenden, Der Antwortinhalt, den wir erhalten, ist leer.

Dies ist unser Code:

private static async Task<int> ReadErrorCodeAsync(HttpResponseMessage response) 
    { 
     var x = response.ReasonPhrase; 
     var errorSerialized = await response.Content.ReadAsStringAsync(); 
     var error = JObject.Parse(errorSerialized); 

     return ((JArray)error["errors"])[0]["code"].Value<int>(); 
    } 

Aber errorSerialized ist immer eine leere Zeichenfolge. Wir verwenden auch einen Swagger UI und dort die Antwort Inhalt ist das, was wir erwarten, z.B .:

{ 
    "errors": [ 
    { 
     "message": "MyBuddy not found!", 
     "code": 9 
    } 
    ] 
} 

Ist es normal, dass der Inhalt eines BadRequest reponse auf Xamarin.Android leer ist? Kann ich irgendetwas tun, z.B. konfiguriere ich den HttpClient anders, damit ich den StringContent erhalte?

EDIT: Wir verwenden die AndroidClientHandler. Dazu haben wir eine Textdatei mit dem Android-Projekt hinzugefügt, setzen Sie die Buildaction zu AndroidResource und seinen Inhalt zu XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

Antwort

3

Dies ist ein Fehler in den AndroidClientHandler. Es liest die Fehlerreaktion nicht richtig. (siehe https://github.com/xamarin/xamarin-android/blob/master/src/Mono.Android/Xamarin.Android.Net/AndroidClientHandler.cs#L308)

Ich habe es behoben. Lassen Sie uns hoffen, dass sie fusionieren es schnell https://github.com/xamarin/xamarin-android/pull/180

:) Wenn Sie es verwenden müssen, bevor Xamarin verschmolzen und veröffentlicht sie, müssen Sie:

  • Kopie dieses folder in irgendeinem Ordner in Ihrem Android-Projekt
  • den Namespace Xamarin.Android.Net.Fix
  • in allen Dateien ändern, um alle Logger Zeilen löschen oder kommentieren, dass der Inhalt Ihrer Umgebung DateiFehler
  • Änderung kompilieren verursachen(ersetzen MyApp.Android mit dem Montag Namen Ihres Android App)
+0

Ich wäre für Hilfe dankbar sein - immer noch nicht das Problem gelöst :( –

+1

Sie können die Version von meiner Pull-Anforderung verwenden. Es sollte das Problem lösen. https://github.com/smstuebe/xamarin-android/blob/client-handler-error-response/src/Mono.Android/Xamarin.Android.Net/AndroidClientHandler.cs –

+0

Funktioniert! Vielen Dank :) –