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

React调用部署在IIS的ASP.NET Core API的PUT接口出现CORS错误如何排查

问题根因说明

Postman调用接口正常是因为Postman不会触发浏览器的跨域预检规则,不会主动发送OPTIONS预检请求,只要PUT方法本身逻辑正常就能调用成功。而浏览器对于跨域的PUT、DELETE等带自定义请求头的非简单请求,会先发送OPTIONS预检请求确认服务端允许跨域,预检失败就会抛出CORS错误,请求根本不会到达后端的业务接口。

排查步骤(按优先级排序)

1. 修复IIS WebDAV模块拦截问题(90%概率是该原因)

IIS默认安装的WebDAV模块会主动拦截OPTIONS、PUT、DELETE这类HTTP谓词,直接拒绝预检请求导致跨域报错,在你站点的web.config文件中添加以下配置即可:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
  <!-- 避免IIS重复添加跨域头和后端CORS配置冲突 -->
  <httpProtocol>
    <customHeaders>
      <remove name="Access-Control-Allow-Origin" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

2. 修正CORS配置冲突

你当前的CORS规则同时配置了WithOrigins(FrontEnd_URL)和SetIsOriginAllowed(_ => true),二者逻辑冲突,后者会直接覆盖前者的域名限制规则:

  • 如果你需要限制仅指定前端域名可访问,直接删除SetIsOriginAllowed((host) => true)这行即可
  • 如果你需要允许所有源访问,删除WithOrigins(FrontEnd_URL)这行即可

3. 确认中间件排序规则

如果你的代码中引入了身份认证、授权相关的中间件(UseAuthentication/UseAuthorization),必须保证UseCors放在这两个中间件之前,否则OPTIONS预检请求会被认证中间件拦截(预检请求默认不带身份凭证),无法到达CORS模块,就会报跨域错误。正确的中间件顺序参考:

app.UseRouting();
app.UseCors(CorsPolicy); // 必须放在授权、认证中间件之前
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(...);

4. 定位预检请求具体报错

打开浏览器F12开发者工具,切换到「网络」面板,找到PUT请求对应的OPTIONS预检请求,查看响应状态码针对性排查:

  • 响应码405:方法不被允许,确认第一步的WebDAV移除配置是否生效
  • 响应码401:认证拦截,确认中间件顺序是否正确,也可以单独配置OPTIONS请求允许匿名访问
  • 响应码500:服务端处理预检请求时报错,查看后端日志定位具体错误

内容的提问来源于stack exchange,提问作者HagerHassan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:01