.NET项目PUT/DELETE请求报405 Method Not Allowed,GET/POST正常
.NET项目PUT/DELETE请求返回405错误排查方案
1. 排查WebDAV模块冲突
这是IIS/IIS Express部署场景下最高发的原因,WebDAV模块默认会拦截PUT、DELETE类型的请求。
修复方式:在项目根目录的web.config文件中添加如下配置,移除WebDAV模块:
<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
如果是ASP.NET Core项目,无需额外配置,只需确保未在中间件管道中启用WebDAV相关组件即可。
2. 排查接口特性与路由配置
- 确认目标接口方法已添加正确的
[HttpPut]/[HttpDelete]特性,未误写为其他请求类型特性 - 确认请求URL与接口路由模板完全匹配,若接口路由要求携带参数(如id),请求未传对应参数时也可能触发405错误
- 若接口使用了
[AcceptVerbs]特性限制请求方法,确认已将PUT、DELETE加入允许列表
3. 排查跨域CORS配置
如果是前端跨域调用接口,需确认CORS策略已允许PUT、DELETE请求:
.NET 6+ 版本Program.cs配置示例:
builder.Services.AddCors(options => { options.AddPolicy("自定义策略名", policy => { policy.AllowAnyOrigin() .AllowAnyHeader() // 明确允许PUT、DELETE,也可直接使用.AllowAnyMethod()允许所有请求方法 .WithMethods("GET", "POST", "PUT", "DELETE"); }); }); // 中间件管道需按顺序启用CORS,放在路由匹配之后、授权验证之前 app.UseCors("自定义策略名");
4. 排查服务器请求筛选配置
若项目部署在IIS服务器上:
- 进入站点的「请求筛选」功能,查看「HTTP谓词」tab下是否禁用了PUT、DELETE,若存在禁用规则,删除对应规则或新增允许PUT、DELETE的规则
- 检查站点处理程序映射中,
ExtensionlessUrlHandler-Integrated-4.0的谓词限制是否包含PUT、DELETE,可直接设置为允许所有谓词
5. 排查全局拦截规则
确认项目中是否存在全局Action过滤器、授权过滤器,存在拦截PUT、DELETE请求返回405的逻辑,可临时注释全局过滤器验证是否为此类原因。
内容的提问来源于stack exchange,提问作者user14169749
相关产品推荐
相关产品推荐

