.NET 5 API部署IIS后所有PUT请求被CORS策略拦截如何解决
问题根因
导致该问题90%以上的概率是IIS层面拦截了PUT请求,请求没有到达.NET的CORS中间件处理流程,因此响应头不会携带CORS相关的Access-Control-Allow-Origin标头,触发跨域报错。最常见的拦截原因分为两类:
- IIS默认安装的WebDAV模块会优先接管PUT、DELETE等HTTP谓词请求,直接返回拦截响应
- IIS请求筛选规则中禁用了PUT谓词
排查步骤
- 查看PUT请求的响应状态码,如果返回
405 Method Not Allowed,可确认是IIS层面的谓词拦截 - 进入IIS管理器,打开对应站点的「模块」功能,检查是否存在
WebDAVModule - 打开站点的「请求筛选」功能,切换到「HTTP谓词」标签,检查PUT谓词是否被设置为拒绝
解决方案
方法1:通过站点web.config配置移除拦截规则(推荐)
在.NET项目的根目录新增web.config文件(如果已有则直接修改),添加如下配置,发布时该文件会同步部署到IIS站点根目录:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <!-- 移除WebDAV模块拦截 --> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> <!-- 确保ASP.NET Core处理器接管所有谓词的请求 --> <remove name="aspNetCore" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <!-- 配置请求筛选允许PUT/DELETE/OPTIONS谓词 --> <security> <requestFiltering> <verbs allowUnlisted="true"> <add verb="PUT" allowed="true" /> <add verb="DELETE" allowed="true" /> <add verb="OPTIONS" allowed="true" /> </verbs> </requestFiltering> </security> </system.webServer> </configuration>
配置完成后重启IIS站点即可生效。
方法2:卸载IIS的WebDAV功能
如果服务器不需要使用WebDAV服务,可直接在服务器角色管理中移除WebDAV发布功能,重启IIS后永久生效。
补充验证
配置生效后可通过Postman直接调用PUT接口,若响应头中出现Access-Control-Allow-Origin标头且返回正常业务结果,说明修复完成。
内容的提问来源于stack exchange,提问作者Matthias Burger
相关产品推荐
相关产品推荐

