Я пытаюсь разобрать ответ от ASP.NET Core Web API.Я могу успешно проанализировать ответ JSON в объект C #, но приложение вылетает, не выдавая никакой ошибки, когда проанализированный объект C # возвращается в ViewModel.
в ViewModel
ApiResponse response = await _apiManager.GetAsync<ApiResponse>("authentication/GetUserById/1");
Ответ JSON:
{
"result": {
"id": 1,
"userType": 1,
"firstName": “FirstName”,
"middleName": null,
"lastName": “LastName”,
},
"httpStatusCode": 200,
"httpStatusDescription": "200OkResponse",
"success": true,
"message": "hello"
}
Метод HttpClient GetAsync ():
public async Task<TResult> GetAsync<TResult>(string endpoint)
{
HttpResponseMessage httpResponse = _httpClient.GetAsync(endpoint).GetAwaiter().GetResult();
httpResponse.EnsureSuccessStatusCode();
TResult t = default(TResult);
if (httpResponse.IsSuccessStatusCode)
{
string serialized = await httpResponse.Content.ReadAsStringAsync();
t = JsonConvert.DeserializeObject<TResult>(serialized);
}
return t;
}
Приложение аварийно завершает работу (отладчик останавливается без ошибок) в операторе «return t».Здесь _httpClient - это одиночный объект HttpClient, использующий DI.
Модель TResult - это объект ApiResponse
public class User
{
[JsonProperty("id")]
public int UserId { get; set; }
[JsonProperty("userType")]
public int UserType { get; set; }
[JsonProperty("firstName")]
public string FirstName { get; set; }
[JsonProperty("middleName")]
public string MiddleName { get; set; }
[JsonProperty("lastName")]
public string LastName { get; set; }
}
public abstract class ResponseBase
{
[JsonProperty("httpStatusCode")]
public int HttpStatusCode { get; protected set; }
[JsonProperty("httpStatusDescription")]
public string HttpStatusDescription { get; protected set; }
[JsonProperty("success")]
public bool Success { get; protected set; }
[JsonProperty("message")]
public string Message { get; protected set; }
}
public class ApiResponse : ResponseBase
{
[JsonProperty("result")]
public User Result { get; set; } = new User();
}
Существуют две проблемы: 1. при выполнении следующего оператора происходит сбой приложения и отладчик останавливаетсябез каких-либо ошибок.
HttpResponseMessage httpResponse = await _httpClient.GetAsync(endpoint).ConfigureAwait(false);
Но когда GetAsync () вызывается с помощью .GetAwaiter (). GetResult (), сетевой вызов выполняется успешно.Я не понимаю, почему ConfigureAwait (false) не удается.
HttpResponseMessage httpResponse = _httpClient.GetAsync(endpoint).GetAwaiter().GetResult();
почему следующий вызов завершается неудачно и происходит сбой приложения?Как я могу вернуть разобранный объект C # в вызывающий код?
return JsonConvert.DeserializeObject (сериализовано);
Пожалуйста, сообщите.