Используя WebClient и C#, как мне получить возвращенные данные, даже если ответ (400) Bad Request?

Я использую API Google Translate и пытаюсь получить данные, возвращаемые при получении ошибка. (К вашему сведению: я знаю, что ключ API неверен, я просто проверяю это).

Проблема в том, что браузер, как вы можете видеть, щелкнув ссылку, отображает информацию об ошибке, но 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) неверный запрос (или любой другой ответ на ошибку, если на то пошло)? Нужно ли использовать другие классы, кроме WebClient?


person Mike Webb    schedule 05.03.2013    source источник


Ответы (2)


Это может помочь вам

catch ( WebException exception )
{
   string responseText;

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

Это даст вам текст json, который вы затем сможете преобразовать из JSON, используя любой метод, который вы предпочитаете.

Получено из: Получить ошибки WebClient в виде строки

person nekosune    schedule 05.03.2013
comment
Можно ли получить этот объект, если он не выдает исключение? - person DFTR; 03.10.2016

Я бы поймал конкретное исключение, которое вы получаете, - оно будет иметь соответствующие данные о сбое.

Согласно MSDN, WebException.Response будет содержать ответ, полученный от сервера.

Как только вы сможете получить данные JSON из этого объекта ответа, вам нужно будет десериализовать его самостоятельно, если хотите.

person davisoa    schedule 05.03.2013