2013-03-05 21 views
9

Używam Google Translate API i próbuję przechwycić dane zwrócone, gdy otrzymam numer error. (FYI: Wiem, że klucz API jest nieprawidłowy, właśnie to testuję).Korzystanie z WebClient i C#, jak mogę uzyskać zwrócone dane, nawet gdy odpowiedź jest (400) Bad Request?

Problem polega na tym, że przeglądarka, jak widać po kliknięciu łącza, wyświetla informacje o błędzie, ale C# generuje wyjątek WebException i nie mogę uzyskać danych odpowiedzi.

Oto mój kod:

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; 
} 

Jak uzyskać błąd JSON zwrócony nawet jeśli odpowiedź jest (400) Bad Request (lub innego resonse błędu dla tej sprawy)? Czy muszę używać różnych klas innych niż WebClient?

Odpowiedz

25

To może pomóc

catch (WebException exception) 
{ 
    string responseText; 

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

który będzie Ci tekst json, które można następnie przekonwertować z JSON stosując dowolny sposób wolisz.

Źródło: Get WebClient errors as string

+0

Dzięki! Działa doskonale. –

+0

Czy można uzyskać ten obiekt, jeśli nie rzuca wyjątku? – DFTR

1

Chciałbym złapać konkretny wyjątek, który otrzymujesz - będzie on zawierał istotne dane dotyczące awarii.

Według MSDN, WebException.Response będzie zawierać odpowiedź otrzymaną z serwera.

Po uzyskaniu danych JSON z tego obiektu odpowiedzi, konieczne jest jego deserializowanie samodzielnie, jeśli chcesz.

Powiązane problemy