2013-03-05 20 views
9

私はGoogle Translate APIを使用しており、errorを取得したときに返されるデータをキャプチャしようとしています。 (FYI:APIキーが間違っていることを知っています。私はこれをテストしています)。WebClientとC#を使用すると、レスポンスが(400)Bad Requestであっても、返されるデータはどのように取得されますか?

問題はブラウザがリンクをクリックすると表示されるようにエラー情報を表示しますが、C#はWebExceptionをスローし、応答データを取得できないようです。ここで

は私のコードです:

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

は、どのように私はJSONエラーレスポンスが(400)不正な要求(またはそのことについては、他のエラーresonse)であっても返され得るのですか? WebClient以外の別のクラスを使用する必要がありますか?

答えて

25

これは、あなたが、あなたが好む方法使用してJSONから変換することができますことを、あなたにJSONテキストを取得します

catch (WebException exception) 
{ 
    string responseText; 

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

を助けるかもしれません。

から取得しましたGet WebClient errors as string

+0

ありがとうございました!完璧に働いた。 –

+0

例外をスローしない場合は、このオブジェクトを取得できますか? – DFTR

1

私はあなたが受け取っている特定の例外を捕まえるでしょう - それは失敗に関する適切なデータを持っています。

MSDNによれば、WebException.Responseには、サーバーから受信した応答が含まれます。

このレスポンスオブジェクトからJSONデータを取得できたら、必要に応じて自分でデシリアライズする必要があります。

関連する問題