CORS策略是服务器端定义的跨域访问规则,.NET通过AddCors注册策略、UseCors启用中间件,并在控制器上用[EnableCors]标记,配合正确顺序的请求管道配置,实现对指定源、方法和头部的跨域支持,解决前端请求阻塞问题。

.NET中的CORS(跨域资源共享)策略是一种安全机制,用于控制浏览器是否允许前端应用从不同源(域名、协议或端口)请求后端API。默认情况下,浏览器出于安全考虑会阻止跨域请求,因此当你的前端(如Vue、React)运行在http://localhost:3000而.NET API运行在https://localhost:5001时,就会触发跨域问题。
什么是CORS策略?
CORS策略是在服务器端定义的规则,告诉浏览器哪些外部源可以访问API资源。.NET通过Microsoft.AspNetCore.Cors中间件来实现CORS支持。你需要在Program.cs中配置策略,指定允许的源、HTTP方法和请求头。
如何配置CORS解决跨域问题?
以下是具体步骤:
- 添加CORS服务:在Program.cs的AddServices阶段注册CORS服务,并定义命名策略。
- 启用CORS中间件:在请求管道中调用UseCors,应用你定义的策略。
- 在控制器或Action上启用策略:使用[EnableCors("PolicyName")]特性标记需要跨域支持的接口。
示例代码:
// Program.cs
var builder = WebApplication.CreateBuilder(args);
// 添加CORS服务
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowFrontend", policy =>
{
policy.WithOrigins("http://localhost:3000") // 允许的前端地址
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials(); // 如果需要发送Cookie或认证信息
});
});
var app = builder.Build();
// 使用CORS中间件(注意顺序:必须在MapControllers之前)
app.UseCors("AllowFrontend");
app.MapControllers();
app.Run();
常见配置选项说明
- WithOrigins:指定允许访问的前端域名,可写多个。避免使用AllowAnyOrigin()在生产环境,除非配合凭证检查。
- AllowAnyMethod / WithMethods:允许所有或指定HTTP动词(GET、POST等)。
- AllowAnyHeader / WithHeaders:允许所有或特定请求头。
- AllowCredentials:当需要携带身份凭证(如JWT Cookie)时必须开启,此时不能使用AllowAnyOrigin。
预检请求(Preflight)处理
对于复杂请求(如带自定义Header或Content-Type为application/json),浏览器会先发送OPTIONS请求。.NET默认会自动响应这些预检请求,只要CORS策略已正确配置。确保UseCors在UseRouting之后、UseAuthorization和MapControllers之前调用。
基本上就这些。只要策略定义清楚、中间件顺序正确,大多数跨域问题都能解决。开发时可临时放宽限制,上线前再收紧安全性设置。










