ASP.NET Core 6 Web API调用存储过程报500错误,请求协助
解决ASP.NET Core 6 Web API调用存储过程返回500错误的问题
首先你代码里存在直接的语法错误,执行存储过程的SQL语句中两个参数之间缺少逗号,这会导致SQL执行失败,触发500错误。
修正后的控制器代码
[HttpGet] [Route("api/listaEntrePrecios")] public IEnumerable<Producto> listaEntrePrecios([FromQuery] int minimo, [FromQuery] int maximo) { var parameters = new[] { new SqlParameter("@Minimo", minimo), new SqlParameter("@Maximo", maximo) }; // 给参数添加逗号分隔符 var lista = context.productos.FromSqlRaw("EXECUTE listaProductoPrecio @Minimo, @Maximo", parameters).ToList(); return lista; }
额外排查要点
- 实体映射检查:确保
Producto类的属性与Productos表的字段完全匹配(名称、数据类型一致),存储过程SELECT *返回的所有字段必须能被EF Core正确映射到实体属性,否则会引发映射异常。 - 添加异常捕获:在方法中增加try-catch块,捕获并输出具体异常信息,便于精准定位问题:
[HttpGet] [Route("api/listaEntrePrecios")] public IActionResult listaEntrePrecios([FromQuery] int minimo, [FromQuery] int maximo) { try { var parameters = new[] { new SqlParameter("@Minimo", minimo), new SqlParameter("@Maximo", maximo) }; var lista = context.productos.FromSqlRaw("EXECUTE listaProductoPrecio @Minimo, @Maximo", parameters).ToList(); return Ok(lista); } catch (Exception ex) { // 可记录日志或返回错误信息(生产环境不建议返回原始异常) return StatusCode(500, ex.Message); } } - 数据库权限验证:确认应用程序使用的数据库账号拥有执行
listaProductoPrecio存储过程的权限。 - 参数绑定明确性:给方法参数添加
[FromQuery]特性,明确参数来自查询字符串,避免路由或参数绑定错误。
内容的提问来源于stack exchange,提问作者francisco
相关产品推荐
相关产品推荐

