HTTP 客户端方法空异常

HTTP client method null exception

我有一个 API 项目,我需要使用 API 开发一个 Web 项目 我写了一些代码但无法找到异常和问题并且无法从 link.

这是我的服务代码:

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);
        }

我的apireturn值如下:

 {
  "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<AgentReadDto>,但您忘记 awaitAgentLists 操作中调用 GetAgent。这意味着视图所期望的 (IEnumerable<AgentReadDto>) 与它接收到的 (Task<IEnumerable<AgentReadDto>>) 不匹配。

要解决此问题,请将 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 表示一个对象,其中包含一个列表,但您正试图将其解析为一个简单的列表。要解决这个问题,请创建一个与响应结构匹配的包装器 class。例如,创建以下 class:

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

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

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