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

ASP.NET Core Web API报错InvalidOperationException:推断请求体不被允许

解决ASP.NET Core Web API Delete接口的InvalidOperationException异常

问题原因

在ASP.NET Core最小API的MapDelete定义中,框架会自动推断参数的绑定来源。如果接口方法包含服务类参数(比如EmpleadoService)但未明确指定绑定方式,框架会错误地将该参数推断为请求体来源——而Delete请求通常不携带请求体,因此触发InvalidOperationException: Body was inferred but the method does not allow inferred body parameters异常。

解决方案

只需给服务类参数添加[FromServices]特性,明确告知框架该参数从依赖注入容器中获取,而非请求体:

修正后的Program.cs代码示例

var builder = WebApplication.CreateBuilder(args);

// 先把EmpleadoService注册到依赖注入容器
builder.Services.AddScoped<EmpleadoService>();

var app = builder.Build();

// 修正后的Delete接口定义
app.MapDelete("/empleado/eliminar/{idEmpleado}", ([FromRoute] int idEmpleado, [FromServices] EmpleadoService empleadoService) =>
{
    empleadoService.EliminarEmpleado(idEmpleado);
    return Results.NoContent();
});

app.Run();

替代方案:通过HttpContext获取服务

如果不想使用特性标记,也可以通过HttpContext手动从DI容器中获取服务:

app.MapDelete("/empleado/eliminar/{idEmpleado}", (HttpContext context, int idEmpleado) =>
{
    var empleadoService = context.RequestServices.GetRequiredService<EmpleadoService>();
    empleadoService.EliminarEmpleado(idEmpleado);
    return Results.NoContent();
});

关键注意事项

  • 必须确保EmpleadoService已通过AddScoped/AddSingleton/AddTransient正确注册到依赖注入容器
  • 路由参数idEmpleado可自动绑定,添加[FromRoute]是显式标记,不添加也能正常工作,但显式标记代码可读性更强

内容的提问来源于stack exchange,提问作者Yusniel Doral Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:12:08