.NET 6项目Post提交数据至数据库返回500错误排查求助
.NET 6 接口500错误排查结果
核心报错原因
控制台抛出的InvalidOperationException已经明确指向问题:依赖注入容器没有注册LoginService服务。AuthController的构造函数要求DI容器传入LoginService实例,但你在Program.cs里只注册了DbContext、控制器、JWT认证、CORS相关服务,漏了LoginService的注册,容器找不到对应服务就直接抛出异常,这是你改代码后接口500的直接原因。
修复步骤
- 打开Program.cs,在服务注册段(即
var app = builder.Build();代码之前)添加LoginService的注册代码,Web场景下默认用Scoped生命周期即可:builder.Services.AddScoped<LoginService>(); - 修复
LoginService.AddUser方法里的DbContext错误释放问题:你在方法里写了using (var db = _context),会把DI容器注入的DbContext提前释放,后续同个请求里再调用LoginService的其他数据库操作方法时,会触发“对象已释放”的异常,把using块删除,直接用注入的_context操作即可,修正后的代码:public bool AddUser(string name, string password, bool trainer) { var user = new User { Name = name, Password = password, Trainer = trainer }; _context.User.Add(user); _context.SaveChanges(); return true; } - (可选清理)删除
TrainingAppContext里无意义的隐式转换方法,这段代码没有实际业务作用,误触发时会直接抛NotImplementedException:// 删掉这段代码 public static implicit operator string(TrainingAppContext v) { throw new NotImplementedException(); }
原始错误关键信息
System.InvalidOperationException: 尝试激活'TrainingApp.Server.Controllers.AuthController'时,无法解析类型为'TrainingApp.Server.Services.LoginService'的服务。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

