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

React+TS+Vite对接.NET后端IIS部署时的CORS问题求助

解决IIS部署的React+Vite应用POST请求CORS问题

核心问题分析

你的IIS CORS配置存在冲突:Access-Control-Allow-Origin: * 和 Access-Control-Allow-Credentials: true 不能同时生效——浏览器安全机制禁止这种组合,这是导致CORS报错的主要原因。另外,带Content-Type: application/json的POST请求属于非简单请求,浏览器会先发OPTIONS预检请求,若IIS未正确响应也会触发CORS错误。


具体解决步骤

1. 修正IIS的CORS配置

根据是否需要携带凭证(如Cookie、HTTP认证信息),二选一调整配置:

情况A:不需要携带凭证

删掉Access-Control-Allow-Credentials配置,保留通配符Origin:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <!-- 移除或注释凭证允许配置 -->
    <!-- <add name="Access-Control-Allow-Credentials" value="true" /> -->
  </customHeaders>
</httpProtocol>
情况B:需要携带凭证

将Access-Control-Allow-Origin设置为前端实际域名(比如Vite默认的http://localhost:5173),不能用*:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="http://localhost:5173" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

2. 确保IIS正确响应OPTIONS预检请求

非简单请求会触发OPTIONS预检,需保证IIS返回200状态码。可在web.config中添加OPTIONS请求处理规则:

<system.webServer>
  <handlers>
    <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="None" />
  </handlers>
</system.webServer>

更推荐的方式是安装IIS官方的CORS模块(通过Web平台安装程序),可视化配置允许的来源、方法和headers,避免手动配置出错。

3. 调整前端请求代码(按需)

如果后端配置了允许携带凭证,前端Fetch请求需要添加credentials: 'include':

async function httpPostRequest<T = any>(url: string, data: object): Promise<T> {
  try {
      const response = await fetch(url, {
          method: 'POST',
          credentials: 'include', // 仅当需要带凭证时添加
          headers: {
              'Content-Type': 'application/json',
          },
          body: JSON.stringify(data),
      });
      if (!response.ok) {
          throw new Error(`HTTP error! Status: ${response.status}`);
      }

      return await response.json();
  } catch (error) {
      throw error;
  }
}

4. 验证排查

打开浏览器开发者工具Network面板:

  • 查看OPTIONS请求的响应头,确认Access-Control-Allow-Origin与配置一致,无冲突项;
  • 检查POST请求的响应头是否包含正确的CORS字段;
  • 若仍报错,查看控制台的具体错误信息,定位是Origin不允许、headers不支持还是预检请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:35:43