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

.NET 5 API部署IIS后所有PUT请求被CORS策略拦截如何解决

问题根因

导致该问题90%以上的概率是IIS层面拦截了PUT请求,请求没有到达.NET的CORS中间件处理流程,因此响应头不会携带CORS相关的Access-Control-Allow-Origin标头,触发跨域报错。最常见的拦截原因分为两类:

  • IIS默认安装的WebDAV模块会优先接管PUT、DELETE等HTTP谓词请求,直接返回拦截响应
  • IIS请求筛选规则中禁用了PUT谓词

排查步骤

  1. 查看PUT请求的响应状态码,如果返回405 Method Not Allowed,可确认是IIS层面的谓词拦截
  2. 进入IIS管理器,打开对应站点的「模块」功能,检查是否存在WebDAVModule
  3. 打开站点的「请求筛选」功能,切换到「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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:57:01