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

CORS预检请求持续失败求助(React+ASP.NET 4.7.2)

CORS预检请求失败排查方案

核心问题分析与解决步骤

1. .NET Framework 4.7.2对通配符*的兼容性限制

ASP.NET Framework 4.7.2中,当请求包含自定义头部(如UserId、FE_URL)或Authorization这类凭证头部时,Access-Control-Allow-Headers: *不会生效,必须显式列出所有自定义请求头。同时带凭证的请求不能用*作为Access-Control-Allow-Origin,需指定具体前端域名。

修改Web.config配置:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Headers" value="Content-Type, UserId, FE_URL, Authorization" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Allow-Origin" value="http://你的前端IIS域名:端口" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

2. IIS未正确处理OPTIONS预检请求

本地IIS可能直接拦截OPTIONS请求,未转发至Web API,导致预检失败。

在Web.config中添加OPTIONS请求处理映射:

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

若安装了IIS自带的CORS模块,建议暂时禁用,避免与ASP.NET配置冲突。

3. Axios凭证请求配置缺失

你的请求包含Authorization头部,属于带凭证请求,需在Axios实例中开启withCredentials:

const axiosInstance = axios.create({
  withCredentials: true,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'UserId': `${UserId}`,
    'FE_URL': `${CurrentURL}`,
    'Authorization': `Basic ${ACCESS_TOKEN}`,
  }
})

4. 后端授权拦截器拦截OPTIONS请求

若后端有授权过滤器,需跳过OPTIONS请求的授权校验:

public override void OnAuthorization(HttpActionContext actionContext)
{
    if (actionContext.Request.Method == HttpMethod.Options)
    {
        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK);
        return;
    }
    // 原有授权逻辑
}

5. 排查具体错误信息

打开浏览器开发者工具Network面板,查看OPTIONS请求的响应:

  • 404状态:检查IIS的请求映射是否正确转发OPTIONS到Web API
  • 403状态:确认是否有授权逻辑拦截了OPTIONS请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:35:27