Получить ответ JSON от WebException

Я пробовал ответ ниже, но все, что я получаю, это пустая строка.

WebException, как получить полный ответ с телом?

Я протестировал попадание в конечную точку через почтальона и получил ответ json (ответ с ошибкой), как и ожидал. Но когда я пытаюсь попасть в эту конечную точку в .net, ответ, похоже, не содержит JSON. Приведенные выше ответы на вопросы приводят к пустой строке.

catch (WebException ex)
        {

            var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();

            dynamic obj = JsonConvert.DeserializeObject(resp);
            var messageFromServer = obj.error.message;
            return messageFromServer;

        }

И когда я пытаюсь просто вернуть строку ReadToEnd(), она пуста. Просто "".

Но, как указывалось ранее, конечная точка, которую я нажимаю, возвращает JSON правильно.

{
    "Message" : "The number could not be found"
}

person cphilpot    schedule 31.10.2018    source источник
comment
Что у вас есть в ex.Message?   -  person Grzesiek Danowski    schedule 31.10.2018
comment
В большинстве случаев ответы об ошибках не содержат текст сообщения. Вы должны убедиться, что есть что прочитать, прежде чем пытаться это прочитать. 401, 403 или 500 не будут содержать тел. Проверьте WebException. Status перед попыткой прочитать ответ   -  person Panagiotis Kanavos    schedule 31.10.2018
comment
Код должен работать так. Вы уверены, что в вашем тесте нет другой ошибки HTTP? Вероятно, это другая ошибка, чем номер не найден   -  person Reno    schedule 31.10.2018
comment
@GrzesiekDanowski Он просто говорит, что произошла ошибка   -  person cphilpot    schedule 01.11.2018
comment
@ Рено Это так. Пишет, что произошла ошибка, что совершенно бесполезно. Мне нужна конкретная ошибка с сервера. Это стандартный поток для серверов API. Если Панайотис прав, а тело ответа об ошибке не предоставлено, это расстраивает и немного грустно. MS, перестаньте навязывать свое мнение разработчикам. Просто дайте мне весь ответ...   -  person cphilpot    schedule 01.11.2018
comment
Какой код состояния вы получаете в Postman? И такое же поведение, если вы используете HttpClient?   -  person Grzesiek Danowski    schedule 02.11.2018


Ответы (1)


Это только пример, в вашем случае вы должны использовать следующее:

dynamic obj = JsonConvert.DeserializeObject(resp);
var messageFromServer = obj.Message;

Пожалуйста, сравните JSON со связанным вопросом:

{  
   "count":0,
   "startIndex":0,
   "status":1,
   "statusCode":500,
   "error":{  
      "message":"Invalid username or password."
   }
},

и Ваши:

{
    "Message" : "The number could not be found"
}
person isnullxbh    schedule 27.06.2019