ASP.NET Core 配置 CORS 需在 Program.cs 中按顺序注册服务(AddCors)并启用中间件(UseCors),策略名须一致;推荐具名策略,生产环境应避免 AllowAnyOrigin() 与凭据共用。

ASP.NET Core 配置跨域(CORS)很简单,关键是按顺序在 Program.cs 中注册服务并启用中间件,且策略名称要前后一致。
注册 CORS 服务
在 Program.cs 的顶部(var builder = WebApplication.CreateBuilder(args); 之后),添加 CORS 服务:
- 用
AddCors()注册服务,支持链式配置策略 - 推荐使用具名策略(Named Policy),便于后续引用和复用
builder.Services.AddCors(options =>
{
options.AddPolicy("MyAllowAll", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
启用 CORS 中间件
在 var app = builder.Build(); 之后、app.Run(); 之前,调用 UseCors() 启用中间件:
- 必须放在
UseRouting()之后、UseAuthorization()和UseEndpoints()之前 - 传入的策略名必须和
AddPolicy()中定义的一致
app.UseRouting();
app.UseCors("MyAllowAll"); // 注意:这里必须匹配策略名
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
按需应用到控制器或方法
如果不想全局启用,可以只对特定控制器或 Action 启用 CORS:
- 在 Controller 类上加
[EnableCors("MyAllowAll")] - 或在某个 Action 方法上加同样特性
- 若同时在类和方法上标注,方法上的会覆盖类上的
[ApiController]
[Route("api/[controller]")]
[EnableCors("MyAllowAll")]
public class ValuesController : ControllerBase
{
[HttpGet]
public IActionResult Get() => Ok(new[] { "a", "b" });
}
生产环境注意安全细节
开发时用 AllowAnyOrigin() 很方便,但上线前务必收紧:
- 避免使用
AllowAnyOrigin()+AllowCredentials()组合(浏览器会拒绝) - 如需带凭据(如 Cookie),改用
WithOrigins("https://yourdomain.com") - 明确指定允许的 Header 和 Method,例如
WithHeaders("Content-Type", "X-Custom-Header") - 可为不同场景定义多个策略(如 "ApiPolicy"、"ClientPolicy")
基本上就这些。顺序、命名、位置三者对了,CORS 就能正常工作。










