You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC调用API渲染员工列表时空引用异常求助

问题分析与解决方法

核心问题总结

你遇到的NullReferenceException主要由三个原因导致:

  1. API调用未传递GetAllByCompany方法必需的id参数
  2. 直接将API返回的包装型JSON反序列化为数组,导致反序列化失败得到null
  3. 请求失败时未初始化空模型,页面接收的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:08:12