.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(); });
排查方向分步走
客户端验证
- 打开浏览器F12→网络面板,查看请求的响应头,确认是否存在
Access-Control-Allow-Origin字段 - 如果开启了
withCredentials,检查响应头是否包含Access-Control-Allow-Credentials: true
- 打开浏览器F12→网络面板,查看请求的响应头,确认是否存在
服务端验证
- 确认
UseCors的位置在UseRouting之后、UseAuthorization之前 - 如果用了
WithOrigins,确保域名和前端运行地址完全一致(包括http/https、端口号) - 测试预检请求(OPTIONS):CORS请求会先发送OPTIONS请求,检查该请求的响应状态是否为200
- 确认
特殊场景检查
- 如果API启用了HTTPS,确保前端和API的协议一致(都是HTTPS或都是HTTP)
- 检查是否有反向代理(如Nginx)覆盖了CORS响应头
内容的提问来源于stack exchange,提问作者Raptor22
相关产品推荐
相关产品推荐

