簡體   English   中英

HttpContent.ReadAsAsync 方法未從 Web API 調用返回正確的值

[英]HttpContent.ReadAsAsync method not returning correct value from a Web API call

我的 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.ReadAsAsync 方法在進行 API 調用后檢查響應中的布爾值:

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

問題是結果返回為false 我可能會錯過什么?

我意識到,這是因為我回國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 將確保返回預期值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM