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>
,但您忘记 await
在 AgentLists
操作中调用 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;
我有一个 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>
,但您忘记 await
在 AgentLists
操作中调用 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;