ASP.NET Web API跨域请求报错:缺少Access-Control-Allow-Origin头
解决ASP.NET Web API跨域CORS报错问题
核心问题:中间件顺序错误
你的代码里app.UseCors的位置不符合ASP.NET中间件的执行规则,CORS中间件必须在授权中间件之前、路由映射之前运行,否则无法正确添加CORS响应头,导致跨域报错。
修正后的Program.cs代码
global using webapi.Models; var MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; var builder = WebApplication.CreateBuilder(args); // 注册服务 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddDbContext<PhdevContext>(); // CORS策略配置 builder.Services.AddCors(options => { options.AddPolicy(name: MyAllowSpecificOrigins, policy => { policy.WithOrigins("https://localhost:7036") .AllowAnyHeader() .AllowAnyMethod(); }); }); var app = builder.Build(); // 开发环境Swagger配置 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // 关键:CORS中间件必须放在UseAuthorization之前 app.UseCors(MyAllowSpecificOrigins); app.UseAuthorization(); app.MapControllers(); app.Run();
额外排查要点
- 核对前端实际运行地址:确认前端的协议、域名、端口和你CORS策略里配置的
https://localhost:7036完全一致,比如React默认运行端口是3000,若前端用的是这个端口,需要同步修改CORS配置。 - 若前端请求需要携带Cookie或认证信息,需在CORS策略中添加
.AllowCredentials(),同时前端请求要设置credentials: 'include'。 - 检查是否有自定义中间件提前拦截了请求,导致CORS响应头未被正常添加。
- 用浏览器开发者工具的网络面板查看请求响应头,确认是否存在
Access-Control-Allow-Origin字段,以此验证CORS策略是否生效。
内容的提问来源于stack exchange,提问作者Feryat Aba
相关产品推荐
相关产品推荐

