ASP.NET Core 配置 CORS 的核心是 AddCors 注册命名策略 + UseCors 启用中间件,并在控制器或方法上指定策略名;需注意策略名匹配、中间件顺序(UseCors 在 UseRouting 后、MapControllers 前)、AllowCredentials 与 WithOrigins("*") 互斥。

ASP.NET Core 配置跨域(CORS)策略,核心是通过 AddCors 注册服务 + UseCors 启用中间件,并在控制器或方法上指定策略名称。关键不是“开不开”,而是“怎么精准控制谁、哪些请求、允许什么操作”。
注册 CORS 服务并定义命名策略
在 Program.cs(.NET 6+)中,调用 AddCors 添加服务,并用 AddPolicy 定义一个带名字的策略。策略里明确允许的源、方法、头等:
- 用
WithOrigins("https://example.com")限制具体前端域名(不建议用"*",尤其带凭据时) - 用
AllowAnyMethod()或WithMethods("GET", "POST")控制 HTTP 方法 - 用
AllowCredentials()允许携带 Cookie/Authorization(此时WithOrigins不能为"*") - 用
WithHeaders("Content-Type", "X-Requested-With")或AllowAnyHeader()控制请求头
示例:
builder.Services.AddCors(options =>
{
options.AddPolicy("MyApiPolicy", policy =>
{
policy.WithOrigins("https://myapp.com")
.AllowAnyMethod()
.AllowCredentials()
.WithHeaders("Content-Type", "Authorization");
});
});启用 CORS 中间件并指定策略
在 UseCors 调用时传入策略名,位置必须在 UseRouting 之后、UseEndpoints(或 MapControllers)之前:
app.UseRouting();app.UseCors("MyApiPolicy"); // ✅ 放这里
app.UseAuthentication(); app.UseAuthorization();
app.MapControllers();
注意:UseCors 不会自动应用到所有端点——只有被路由匹配到且没被其他中间件短路的请求才生效。
按需应用策略:全局 / 控制器 / 方法级
策略注册后,有三种方式启用:
-
全局启用:在
UseCors("xxx")里指定策略名,所有匹配路由的请求都走该策略 -
控制器级别:在 Controller 类上加
[EnableCors("MyApiPolicy")] -
方法级别:在 Action 方法上加
[EnableCors("MyApiPolicy")],可覆盖控制器策略
如果某个接口不需要跨域,就别加;如果要多个策略,可分别命名并在不同地方引用。
调试和常见坑点
遇到跨域失败,先看浏览器控制台的预检(OPTIONS)响应头是否含 Access-Control-Allow-Origin:
- 404 OPTIONS 请求?检查是否启用了
UseCors,且顺序正确 - 返回 204 但没头?确认策略名拼写一致,且
AddPolicy在AddCors内部 - 带凭据却报错“Origin not allowed”?检查
WithOrigins没写成"*",且协议、端口、子域名完全匹配 -
开发环境想临时放开?可定义一个
"DevPolicy"允许http://localhost:3000等常用前端地址
基本上就这些。配置本身不复杂,容易忽略的是策略名匹配、中间件顺序、凭据与通配符互斥这三点。










