【问题标题】:HTTP client method null exceptionHTTP 客户端方法空异常
【发布时间】:2022-01-25 23:10:44
【问题描述】:

我有一个 API 项目,我需要使用该 API 开发一个 Web 项目,我编写了一些代码但无法找到异常和问题,并且无法从链接中获取数据。

这是我的服务代码:

public async Task<IEnumerable<AgentReadDto>> GetAgent()
        {
            IEnumerable<AgentReadDto> agents = new List<AgentReadDto>();
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://localhost:44331/api/");

                var response = client.GetAsync("Agent/GetAllAgent");
                response.Wait();

                var result = response.Result;

                if (result.IsSuccessStatusCode)
                {
                    var readTask =JsonConvert.DeserializeObject<IList<AgentReadDto>>(await result.Content.ReadAsStringAsync());
                    agents = readTask;
                }
            }
            return agents;
        }

我的控制器代码如下所示:

public IActionResult AgentLists()
        {
            var agentsList = _agentRespositoryWeb.GetAgent();

            if (agentsList != null )
            {
                ViewBag.Message = "There was a problem retrieving agent from the database or no agents exists";
            }
            ViewBag.SuccessMessage = TempData["SuccessMessage"];
            return View(agentsList);
        }

我的 api 返回以下值:

 {
  "agentDetail": [
    {
      "usersId": 85,
      "firstName": "Amit",
      "lastName": "One",
      "gender": "Male",
      "informationTips": [
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        },
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        },
      ]
    },
    {
      "usersId": 86,
      "firstName": "Amit",
      "lastName": "Two",
      "gender": "Male",
      "informationTips": [
        {
          "video": "https://www.w3schools.com/html/movie.mp4"
        }
      ]
    }
  ]
}

除了我添加的图像之外,有三个图像在不同的步骤中占据屏幕:

【问题讨论】:

  • 您好,错误消息说您的剃刀视图需要IEnumerable&lt;UserReadDto&gt; 类型。你能分享一下你的UserReadDtoAgentReadDto的模型设计吗?另外,GetAllAgent 的代码是什么? response.Result 的值是否正确?

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

您的模型设置为IEnumerable&lt;AgentReadDto&gt;,但您忘记了awaitAgentLists 操作中调用GetAgent。这意味着视图期望的 (IEnumerable&lt;AgentReadDto&gt;) 和它接收的 (Task&lt;IEnumerable&lt;AgentReadDto&gt;&gt;) 之间存在不匹配。

要解决此问题,请将AgentLists 转换为async 方法,然后将await 调用转换为GetAgent。这是AgentLists 操作的固定版本:

public async Task<IActionResult> AgentLists()
{
    var agentsList = await _agentRespositoryWeb.GetAgent();

    if (agentsList != null)
    {
        ViewBag.Message =
            "There was a problem retrieving agent from the database or no agents exists";
    }

    ViewBag.SuccessMessage = TempData["SuccessMessage"];
    return View(agentsList);
}

看起来您希望返回的类型与实际返回的 JSON 不匹配。 JSON 表示一个对象,其中包含一个列表,但您试图将其解析为一个简单的列表。要解决这个问题,请创建一个与响应结构匹配的包装类。例如,创建以下类:

public class ApiResponse
{
   public IEnumerable<AgentReadDto> AgentDetail { get; set; }
}

更新反序列化逻辑以使用这种新类型:

var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(...);
var agentsLit = apiResponse.AgentDetail;

【讨论】:

猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
相关资源
最近更新 更多