2013-03-05 4 views
9

Ich verwende die Google Translate API und versuche, die zurückgegebenen Daten zu erfassen, wenn ich eine error bekomme. (Zu Ihrer Information: Ich weiß, dass der API-Schlüssel falsch ist, ich teste das nur).Mit einem WebClient und C#, wie bekomme ich zurückgegebene Daten, selbst wenn die Antwort (400) Bad Request ist?

Das Problem ist, dass der Browser, wie Sie durch Klicken auf den Link sehen können, die Fehlerinformationen anzeigt, aber C# löst eine WebException und ich kann nicht scheinen, die Antwortdaten zu erhalten.

Hier ist mein Code:

string url = "https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world"; 
WebClient clnt = new WebClient(); 

//Get string response 
try 
{ 
    strResponse = clnt.DownloadString(url); 
    System.Diagnostics.Debug.Print(strResponse); 
} 
catch (Exception ex) 
{ 
    System.Windows.Forms.MessageBox.Show(ex.Message); 
    return null; 
} 

Wie kann ich die JSON Fehler zurückerhalten, selbst wenn die Antwort a (400) Bad Request (oder ein anderer Fehler resonse für diese Angelegenheit) ist? Muss ich andere Klassen als WebClient verwenden?

Antwort

25

Sie Dies kann

catch (WebException exception) 
{ 
    string responseText; 

    using(var reader = new StreamReader(exception.Response.GetResponseStream())) 
    { 
    responseText = reader.ReadToEnd(); 
    } 
} 

helfen, dass Sie die json Text bekommen, dass Sie dann von JSON mit je nachdem, welche Methode Sie bevorzugen umwandeln kann.

Von: Get WebClient errors as string

+0

Vielen Dank! Arbeitete perfekt. –

+0

Ist es möglich, dieses Objekt zu erhalten, wenn es keine Ausnahme auslöst? – DFTR

1

Ich würde die spezifische Ausnahme erhalten, die Sie erhalten - es wird relevante Daten über den Fehler haben.

Laut MSDN enthält WebException.Response die vom Server empfangene Antwort.

Sobald Sie in der Lage sind, die JSON-Daten von diesem Antwortobjekt abzurufen, müssen Sie es selbst deserialisieren, wenn Sie möchten.