C#构建字典CRUD API触发System.ArgumentNullException空值报错如何解决?
报错根因说明
你遇到的System.ArgumentNullException异常本质是向C#字典中插入数据时,传入了空键(drink.Vendor为null)或空有效值(drink.Ingredients为null),也可能是整个drink参数为空导致成员访问时报错。
修复方案
1. 修正控制器参数绑定配置
ASP.NET Core接收POST请求的JSON参数时,需要给接口方法的参数添加[FromBody]特性,否则系统不会将请求体的JSON内容绑定到参数,会直接导致drink参数为null。
示例控制器代码参考:
[HttpPost] public IActionResult AddVendor([FromBody] Drink drink) { // 你的业务逻辑 _yourService.create(drink); return Ok(); }
同时确认Postman请求头已添加Content-Type: application/json,请求体的JSON键名和Drink模型属性名匹配(默认支持驼峰命名匹配,即模型的Vendor属性对应请求的vendor字段)。
2. 给模型添加默认初始化值
C#引用类型的属性默认值为null,你可以直接在模型定义中给属性赋初始值避免空值:
namespace WebApplication2 { public class Drink { public List<string> Ingredients { get; set; } = new List<string>(); public string Vendor { get; set; } = string.Empty; } }
3. 业务逻辑增加空值校验与防重复处理
C#字典不允许Key为null,也不允许重复插入同一个Key,你需要在插入前做校验:
public void Create(Drink drink) { // 校验Vendor必填 if (string.IsNullOrWhiteSpace(drink.Vendor)) { throw new ArgumentException("Vendor字段不能为空"); } // 兜底处理Ingredients空值 drink.Ingredients ??= new List<string>(); // 处理重复Key的场景,可根据需求选择更新或抛出业务异常 if (VENDORS.ContainsKey(drink.Vendor)) { VENDORS[drink.Vendor] = drink.Ingredients; return; } VENDORS.Add(drink.Vendor, drink.Ingredients); }
内容的提问来源于stack exchange,提问作者Emmanz95
相关产品推荐
相关产品推荐

