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 就能正常工作。
