ASP.NET Core 2.0部署IIS 8.5后DELETE/PUT请求报405方法不允许求助
解决ASP.NET Core 2.0在IIS 8.5上PUT/DELETE请求405错误的方案
我帮你梳理几个针对这个问题的排查和解决步骤,都是基于ASP.NET Core 2.0在IIS 8.5部署的常见坑:
检查ASP.NET Core模块的web.config配置
确保你的web.config里的aspNetCorehandler已经明确允许所有HTTP动词。很多时候部署时自动生成的web.config可能没配置全,手动修改成这样:<system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> </system.webServer>重点看
verb="*"这部分,必须设置为允许所有动词,而不是限定GET/POST。排查IIS请求筛选规则
打开IIS管理器,找到你的站点,进入「请求筛选」→「HTTP动词」标签:- 检查是否存在拒绝PUT或DELETE的规则,如果有直接删除
- 如果没有允许规则,手动添加允许PUT和DELETE的规则,或者直接设置为允许所有动词
彻底清理WebDAV模块的残留配置
你之前试过禁用WebDAV,但有时候IIS的applicationHost.config里还会残留WebDAV的注册。可以按这个步骤操作:- 打开
C:\Windows\System32\inetsrv\config\applicationHost.config(需管理员权限打开) - 搜索
<modules>节点,找到<add name="WebDAVModule" />这一行,直接删除 - 再搜索
<handlers>节点,找到<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />,同样删除 - 重启IIS服务(命令行运行
iisreset)
- 打开
验证应用内部的路由和Action配置
有时候问题不在IIS,而是ASP.NET Core应用本身:- 检查你的API控制器Action是否正确标记了
[HttpDelete]或[HttpPut]属性 - 确认路由模板没有意外限制了HTTP动词,比如有没有在路由里加了多余的约束
- 可以在本地测试时用Postman之类的工具,确认PUT/DELETE请求本身是能正常工作的,排除应用代码问题
- 检查你的API控制器Action是否正确标记了
检查ExtensionlessUrlHandler的动词设置
虽然你之前试过这个,但再仔细核对一次:- 在IIS管理器的站点「Handler Mappings」里找到「ExtensionlessUrlHandler-Integrated-4.0」
- 右键选择「编辑请求限制」,切换到「动词」标签
- 选择「全部动词」,或者手动输入
GET,HEAD,POST,DEBUG,PUT,DELETE确保包含所需动词
按这个顺序排查下来,大部分405的问题都能解决。如果还是不行,可以尝试启用ASP.NET Core的详细日志,看看请求到达应用前有没有被拦截的痕迹。
内容的提问来源于stack exchange,提问作者Neilski
相关产品推荐
相关产品推荐

