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

.NET Core API调用时出现CORS Missing Allow Origin错误求助

解决.NET Core API与Axios间的CORS Missing Allow Origin错误

先纠正你代码里的明显错误

客户端(JavaScript)问题

你在Axios请求头里添加"Access-Control-Allow-Origin": "*"是完全错误的——这个响应头只能由服务端返回,客户端发起请求时不需要(也不应该)携带它。另外,withCredentials: true只有在需要携带Cookie/HTTP认证信息时才需要开启,开启后服务端不能用AllowAnyOrigin,必须指定具体域名。

修正后的客户端代码:

function ApiController({id}){
    const [user, setUser] = useState({});
    useEffect(() => {
        axios
        .get(`https://localhost:7278/User/${id}`, {
                headers: {
                    'Content-Type': 'application/json'
                },
                // 仅当需要携带Cookie时开启,否则删除这行
                // withCredentials: true
            })
        .then(res => console.log(res))
        .catch(err => console.log(err))
    }, [id]);

服务端(.NET Core)问题

你的Startup.cs里UseCors配置有重复的AllowAnyHeader,更关键的是中间件顺序错误——UseCors必须放在UseRouting之后、UseAuthorization之前,否则CORS策略不会生效。

修正后的Startup.cs代码:

// 配置CORS服务
services.AddCors(options => {
    options.AddDefaultPolicy(builder => {
        // 场景1:不需要携带Cookie,允许所有来源
        builder.AllowAnyOrigin()
               .AllowAnyHeader()
               .AllowAnyMethod();

        // 场景2:需要携带Cookie(对应客户端withCredentials: true),必须指定具体前端域名
        // builder.WithOrigins("http://localhost:3000") // 替换成你的前端运行地址
        //        .AllowAnyHeader()
        //        .AllowAnyMethod()
        //        .AllowCredentials();
    });
});

// 中间件顺序严格按照以下顺序
app.UseRouting();

// 启用默认CORS策略(直接调用UseCors即可,不用重复写builder)
app.UseCors();

app.UseAuthorization();

app.UseEndpoints(endpoints => {
    endpoints.MapControllers();
});

排查方向分步走

  1. 客户端验证

    • 打开浏览器F12→网络面板,查看请求的响应头,确认是否存在Access-Control-Allow-Origin字段
    • 如果开启了withCredentials,检查响应头是否包含Access-Control-Allow-Credentials: true
  2. 服务端验证

    • 确认UseCors的位置在UseRouting之后、UseAuthorization之前
    • 如果用了WithOrigins,确保域名和前端运行地址完全一致(包括http/https、端口号)
    • 测试预检请求(OPTIONS):CORS请求会先发送OPTIONS请求,检查该请求的响应状态是否为200
  3. 特殊场景检查

    • 如果API启用了HTTPS,确保前端和API的协议一致(都是HTTPS或都是HTTP)
    • 检查是否有反向代理(如Nginx)覆盖了CORS响应头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:15:39