Использование HttpResponseMessage для просмотра ошибок

1

Я могу использовать следующий код, который отлично подходит для входа в систему с использованием моего веб-API. Однако, когда что-то пошло не так, и возвращается ошибка, я не знаю, как получить конкат HttpResponseMessage. Если я просто использую метод ReadAsStringAsync(), я получаю ошибку в строке, но какой это тип? Если я знаю тип, я могу получить объект.

HttpResponseMessage response = await client.PostAsJsonAsync("api/Login", loginObject);
if (response.IsSuccessStatusCode)
{
    var _logonResponse = await response.Content.ReadAsAsync<TokenResponseModel>();
}
else
{
    // an error has occured, but what is the type to read?
    var test = await response.Content.ReadAsStringAsync();
}

На сервере он возвращается;

BadRequest(ModelState).

Спасибо за любую помощь.

EDIT: С тех пор я решил проблему таким образом;

var value = await response.Content.ReadAsStringAsync();
var obj = new { message = "", ModelState = new Dictionary<string, string[]>() };
var x = JsonConvert.DeserializeAnonymousType(value, obj);
Теги:
asp.net-web-api

4 ответа

0
Лучший ответ

Возвращаемый результат - это объект JSON с свойствами " Message " и " ModelState ".

Значение состояния " ModelState " является объектом, свойства которого являются массивами строк. Список свойств " ModelState " меняется время от времени в зависимости от того, какое свойство является недопустимым.

Следовательно, чтобы получить ответ типа сильного типа, почему бы вам не манипулировать ModelState самостоятельно на стороне сервера, а затем передать объект методу BadRequest()

  • 0
    Спасибо за эту информацию. Это помогло мне решить проблему с помощью JsonConvert.DeserializeAnonymousType (value, obj);
  • 0
    Добро пожаловать
1

Вот просто захват сырого json в тексте сообщения об ошибке...

 if (!response.IsSuccessStatusCode)
 {                                
    dynamic responseForInvalidStatusCode = response.Content.ReadAsAsync<dynamic>();
    Newtonsoft.Json.Linq.JContainer msg = responseForInvalidStatusCode.Result;
    result = msg.ToString();
 }
0

попробуйте следовать:

 try
    {
            HttpResponseMessage response = await client.PostAsJsonAsync("api/Login", loginObject);
            response.EnsureSuccessStatusCode();
            var _logonResponse = await response.Content.ReadAsAsync<TokenResponseModel>();
            return _logonResponse;
    }
  catch (Exception ex)
    {
           throw ex;        
    }
0

Попробуйте IOStreamReader. Это vb.net, но это не так сложно конвертировать:

IOStreamReader = New IO.StreamReader(Response.GetResponseStream)
RespStr = IOStreamReader.ReadToEnd

Или

       Dim HttpReq As Net.HttpWebRequest = Nothing
       Dim HttpStatus As Net.HttpStatusCode = Nothing

      HttpResp = CType(HttpReq.GetResponse(), Net.HttpWebResponse)            
      'verify the response
      HttpStatus = HttpResp.StatusCode

Ещё вопросы

Сообщество Overcoder
Наверх
Меню