2013-03-05 14 views
9

Sto utilizzando il Google Translate API e sto cercando di acquisire i dati restituiti quando ottengo un error. (FYI: So che la chiave API è sbagliata, sto solo testando questo).Utilizzando un client Web e C#, come ottengo i dati restituiti anche quando la risposta è (400) Richiesta non valida?

Il problema è che il browser, come è possibile vedere facendo clic sul collegamento, visualizza le informazioni sull'errore, ma C# genera una WebException e non riesco a ottenere i dati di risposta.

Ecco il mio codice:

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

Come faccio a ottenere l'errore JSON restituito anche quando la risposta è una (400) Bad Request (o qualsiasi altro resonse errore per questo)? Devo utilizzare classi diverse oltre a WebClient?

risposta

25

Questo può aiutare

catch (WebException exception) 
{ 
    string responseText; 

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

che ti porterà il testo JSON, che è quindi possibile convertire da JSON utilizzando qualsiasi metodo che preferite.

Estratto da: Get WebClient errors as string

+0

Grazie! Ha funzionato perfettamente –

+0

È possibile ottenere questo oggetto se non genera un'eccezione? – DFTR

1

Vorrei rilevare l'eccezione specifica che si riceve - avrà dati pertinenti relativi al guasto.

Secondo MSDN, WebException.Response conterrà la risposta ricevuta dal server.

Una volta che è possibile recuperare i dati JSON da questo oggetto risposta, è necessario deserializzare se stessi.

Problemi correlati