ASP.NET Core MVC调用API渲染员工列表时空引用异常求助
问题分析与解决方法
核心问题总结
你遇到的NullReferenceException主要由三个原因导致:
- API调用未传递
GetAllByCompany方法必需的id参数 - 直接将API返回的包装型JSON反序列化为数组,导致反序列化失败得到
null - 请求失败时未初始化空模型,页面接收的
List<PersonnelListVM>为null
分步解决
1. 修正API调用,传递高管ID参数
原API的GetAllByCompany方法需要接收int id参数(对应高管所属公司ID),但你当前的请求$"api/user"没有传递该参数,会导致API无法正确返回对应公司的员工数据。
假设你通过Session、当前用户信息或其他方式获取到高管的公司ID(比如executiveCompanyId),修改请求代码:
// 替换executiveCompanyId为实际获取到的高管所属公司ID var responseTask = await _httpClient.GetAsync($"api/user?id={executiveCompanyId}");
2. 匹配API返回结构,修正反序列化逻辑
API返回的JSON是一个包含errors、hasError、data字段的包装对象,而非直接的员工数组。你需要先定义一个对应这个结构的泛型类:
public class ApiResponse<T> { public List<string> Errors { get; set; } public bool HasError { get; set; } public T Data { get; set; } }
然后修改反序列化代码,先解析整个包装对象,再取出data中的员工列表:
if (responseTask.IsSuccessStatusCode) { var responseContent = await responseTask.Content.ReadAsStringAsync(); var apiResponse = JsonConvert.DeserializeObject<ApiResponse<List<PersonnelListVM>>>(responseContent); // 确保即使data为null,也返回空列表避免后续报错 var users = apiResponse?.Data ?? new List<PersonnelListVM>(); return View(users); }
3. 确保请求失败时返回非空模型
当API请求失败时,不要直接返回View(),而是返回一个空的List<PersonnelListVM>,避免页面的Model为null:
// 替换原return View(); return View(new List<PersonnelListVM>());
4. 验证PersonnelListVM属性匹配度
检查PersonnelListVM的属性名称、类型是否与API返回的data中字段完全匹配(比如birthDate应为DateTime或DateTime?,dateOfExit应为DateTime?,字段名大小写要对应,或添加JsonProperty特性指定映射)。例如:
public class PersonnelListVM { public int Id { get; set; } public string ImagePath { get; set; } public string FirstName { get; set; } // 其他属性按照API返回字段定义,注意可空类型和字段名匹配 public DateTime? DateOfExit { get; set; } }
内容的提问来源于stack exchange,提问作者Dilara PINAR
相关产品推荐
相关产品推荐

