HttpContent.ReadAsAsyn c метод не возвращает правильное значение из вызова веб-API - PullRequest
0 голосов
/ 25 марта 2020

Мой метод WebAPI возвращает код состояния, а также логическое значение:

[HttpPost]
public async Task<HttpResponseMessage> Register([FromBody]string parameter)
{
     HttpStatusCode statusCode = HttpStatusCode.OK;
     RegisterUserResult result = await _service.RegisterAsync(parameter);
     if (result == RegisterUserResult.AlreadyExists)
     {
          statusCode = HttpStatusCode.NoContent;
     }
     else if (result == RegisterUserResult.Created)
     {
          statusCode = HttpStatusCode.Created;
     }
     return Request.CreateResponse(statusCode, true);
}

На стороне клиента я вызываю метод HttpContent.ReadAsAsyn c, чтобы проверить логическое значение в ответе после создания Вызов API:

HttpResponseMessage response = await client.PostAsJsonAsync(uri, parameter);
if (response.IsSuccessStatusCode)
{
     bool result = await response.Content.ReadAsAsync<bool>(); // result is false!
     return result;
}

Проблема в том, что результат возвращается как false . Чего мне не хватать?

1 Ответ

0 голосов
/ 26 марта 2020

Я понял, что это происходит, потому что я возвращаю HttpStatusCode.Created для начального действия (создание пользователя), однако возвращаю HttpStatusCode.NoContent для последующих действий над тем же пользователем.

if (result == RegisterUserResult.AlreadyExists)
{
     statusCode = HttpStatusCode.NoContent;
}

Пока HttpStatusCode.NoContent является успешным кодом состояния, он не позволит предоставить возвращаемое значение в методе Request.CreateResponse , возвращая значение по умолчанию вашего предполагаемого типа возвращаемого значения. Значение

Request.CreateResponse(statusCode, "True"); // returns null on client-side
Request.CreateResponse(statusCode, true); // returns false on client-side

Другие коды успеха, такие как HttpStatusCode.OK или HttpStatusCode.Created, будут обеспечивать возвращение предполагаемого значения.

...