ASP.NET Core 8含ID的PUT/DELETE请求404问题求助
携带ID的PUT/DELETE请求404错误排查方案
先看路由配置的核心问题
绝对路由的坑
你写的[HttpPut("/update/{id}")]是绝对路由,会直接覆盖控制器上的api/[controller]前缀,所以实际生效的请求地址是http://你的域名/update/{id},而不是你可能以为的http://你的域名/api/Users/update/{id},这是最容易导致404的原因。
相对路由的正确用法
你尝试的[HttpPut("{id}")]是相对路由,会和控制器的api/Users前缀拼接,正确的请求地址应该是http://你的域名/api/Users/{id}。如果还是404,按下面的步骤逐一排查:
逐一排查项
- 检查请求方法和URL拼写:确保Postman里用的是PUT方法,URL里的控制器名(Users)、id值没有拼写错误,且id是整数(和方法参数
int id类型匹配,如果你的ID是字符串,要把参数改成string id) - 添加路由类型约束:把路由改成
[HttpPut("{id:int}")],明确指定id是整数,避免因类型不匹配导致路由不命中 - 验证请求头和请求体:确保请求头的
Content-Type是application/json,请求体是合法的JSON格式——因为你用了[FromBody],如果这两项不对,也可能触发404或者请求被拒绝 - 查看注册的所有路由:在Program.cs里加一段代码,启动时打印所有路由,确认你的PUT路由是否正确注册:
var app = builder.Build(); // 打印所有路由端点 var endpointDataSource = app.Services.GetRequiredService<EndpointDataSource>(); foreach (var endpoint in endpointDataSource.Endpoints.OfType<RouteEndpoint>()) { var httpMethod = endpoint.Metadata.GetMetadata<HttpMethodMetadata>()?.HttpMethods.FirstOrDefault(); Console.WriteLine($"路由地址: {endpoint.RoutePattern.RawText}, 请求方法: {httpMethod}"); } app.MapControllers(); app.Run();
启动后看控制台输出,确认你的PUT路由存在,且地址和你请求的一致。
内容的提问来源于stack exchange,提问作者gnab
相关产品推荐
相关产品推荐

