.NET Core MVC集成Web API调用数据库报空引用错误如何解决
.NET Core MVC项目集成Web API模块异常问题排查
问题说明
- 现有.NET Core MVC项目新增Web API模块,基础接口返回字符串、JSON格式数据均正常
- 涉及数据库操作的接口抛出
NullReferenceException空引用异常,报错位置为zfc.webapi.Controllers.zfc类的GetReferrer方法第26行 - 控制器添加
[ApiController]特性后应用完全无法启动,注释该特性后可正常启动,但数据库相关接口仍报错 - 完全相同的数据库操作代码在同项目WebUI层可正常执行
- 已提供Startup.cs配置、Appsettings配置、项目csproj文件、仓储层代码、完整报错堆栈截图
排查方向建议
1. 依赖注入配置校验
- 确认API控制器构造函数注入的仓储、数据库上下文对象,是否已在Startup.cs的
ConfigureServices方法中完成注册,不要仅注册WebUI层用到的服务,遗漏API控制器依赖的服务 - 检查API控制器构造函数是否为公共构造函数,参数是否全部完成服务注册,避免框架无法实例化控制器导致成员变量为空
2. [ApiController]特性启动异常排查
- 校验项目引用的
Microsoft.AspNetCore.Mvc.Core版本是否和当前.NET Core SDK版本匹配,版本不兼容会导致添加[ApiController]后启动报错 - 确认Startup.cs中已调用
services.AddControllers()或services.AddMvc()方法,未注册控制器服务的情况下添加[ApiController]会触发启动异常
3. 空引用异常针对性排查
- 定位
GetReferrer方法第26行代码,确认该行用到的所有对象是否完成初始化,重点检查注入的仓储实例、数据库上下文实例、查询返回的结果对象是否为null - 对比WebUI层和Web API层的中间件注册顺序,如果API层的请求管道没有触发数据库上下文初始化的相关逻辑(比如多租户配置、数据库连接字符串动态赋值逻辑仅在WebUI的路由/授权中间件中执行),会导致API层调用时数据库上下文未初始化
4. 项目配置差异校验
- 确认Web API模块的配置读取逻辑正常,检查是否存在WebUI层和API层读取的配置节点不一致的问题,比如数据库连接字符串是否仅在WebUI的配置文件中存在,API模块读取不到
- 检查csproj文件中是否缺少
Microsoft.EntityFrameworkCore相关包引用,或者引用版本和WebUI层不一致导致数据库操作异常
内容的提问来源于stack exchange,提问作者user16018534
相关产品推荐
相关产品推荐

