ASP.NET Core怎么配置跨域 CORS策略配置方法

8次阅读

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

ASP.NET Core怎么配置跨域 CORS策略配置方法

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 但没头?确认策略名拼写一致,且 AddPolicyAddCors 内部
  • 带凭据却报错“Origin not allowed”?检查 WithOrigins 没写成 "*",且协议、端口、子域名完全匹配
  • 开发环境想临时放开?可定义一个 "DevPolicy" 允许 http://localhost:3000 等常用前端地址

基本上就这些。配置本身不复杂,容易忽略的是策略名匹配、中间件顺序、凭据与通配符互斥这三点。

text=ZqhQzanResources