将 httpResponse 转换为 ResponseEntity 为 null C#

问题描述 投票:0回答:1

我有这个代码:

private class TResponse
{
  public bool IsSuccessful { get; set; }
  public string ErrorCode { get; set; }
  public string ErrorMessage { get; set; }
}

var response = client.PostAsJsonAsync(methodName, data).Result;
TResponse result = default(TResponse);
var responseString = response.Content.ReadAsStringAsync().Result;
if (responseString.CompareTo("null") != 0)
result = response.Content.ReadAsAsync<TResponse>().Result;

在此代码中结果为空。但如果我以其他方式写这个结果将有价值!:

var responseContent = response.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<TResponse>(responseContent.Result.ToString());

为什么第一个代码不起作用?我将其用于许多实体类型,但对于 TResponse 不起作用。

response.Content.ReadAsStringAsync() 返回 "{"IsSuccessful":false,"ErrorCode":"8","ErrorMessage":"XXXXXXxxxxsssssss."}"

c# httpresponse
1个回答
1
投票

您正在启动一个异步任务。这就是 Async

ReadAsAsync
的名称所暗示的内容。因此,您无需等待它完成即可运行它,这允许您的程序在等待结果的同时完成其他操作。但您还尝试在操作完成之前推断操作的结果。如果您想将调用与结果同步,您可以
await
,例如

result = await response.Content.ReadAsAsync<TResponse>();

在此处了解更多信息:https://rules.sonarsource.com/csharp/tag/async-await/RSPEC-3168/

© www.soinside.com 2019 - 2024. All rights reserved.