当前位置:首页 > C# > 正文

ASP.NET Core跨域详解(预检请求处理与CORS配置实战指南)

在开发现代Web应用时,前端(如Vue、React)与后端(如ASP.NET Core Web API)常常部署在不同的域名或端口上。这种情况下,浏览器出于安全考虑会实施同源策略(Same-Origin Policy),阻止跨域请求。为了解决这个问题,我们需要正确配置CORS(跨域资源共享)。而其中最让人困惑的部分之一,就是预检请求(Preflight Request)的处理。

ASP.NET Core跨域详解(预检请求处理与CORS配置实战指南) Core跨域 预检请求处理 CORS配置 .NET Web API跨域 第1张

什么是预检请求?

当浏览器发送一个“非简单请求”(例如带有自定义Header、使用PUT/DELETE方法、Content-Type为application/json等)时,它会先发送一个OPTIONS请求(即预检请求)到服务器,询问是否允许该跨域请求。只有服务器明确允许,浏览器才会继续发送真正的请求。

在ASP.NET Core中启用CORS

要处理跨域请求(包括预检请求),我们首先需要在ASP.NET Core项目中启用CORS中间件。以下是详细步骤:

第1步:注册CORS服务

Program.cs(.NET 6+)中,添加CORS服务:

var builder = WebApplication.CreateBuilder(args);// 添加CORS服务builder.Services.AddCors(options =>{    options.AddPolicy("MyCorsPolicy", policy =>    {        policy.WithOrigins("http://localhost:3000", "https://your-frontend.com")              .AllowAnyHeader()              .AllowAnyMethod()              .AllowCredentials(); // 如果需要携带Cookie,请启用    });});builder.Services.AddControllers();var app = builder.Build();// 配置HTTP请求管道app.UseRouting();// 启用CORS中间件(必须放在UseRouting之后、UseAuthorization之前)app.UseCors("MyCorsPolicy");app.MapControllers();app.Run();

第2步:确保预检请求被正确处理

ASP.NET Core的CORS中间件会自动处理OPTIONS预检请求,无需手动编写控制器来响应。但前提是:

  • CORS中间件已正确注册并启用;
  • 请求的Origin、Header、Method等符合策略规则;
  • 中间件顺序正确(UseCors 必须在 UseRouting 之后,但在 UseAuthorizationUseEndpoints 之前)。

常见问题排查

如果你发现预检请求返回404或405错误,请检查以下几点:

  1. 确认UseCors中间件位置是否正确;
  2. 确认策略名称是否匹配(如"MyCorsPolicy");
  3. 如果使用了身份验证中间件(如JWT),请确保CORS在认证之前执行;
  4. 避免在控制器中手动处理OPTIONS请求,除非有特殊需求。

高级配置:动态允许所有来源(仅限开发环境)

在开发阶段,你可能希望允许任意来源访问API。可以这样配置(切勿用于生产环境):

builder.Services.AddCors(options =>{    options.AddPolicy("DevCorsPolicy", policy =>    {        policy.AllowAnyOrigin()              .AllowAnyHeader()              .AllowAnyMethod();    });});// 在开发环境中使用宽松策略if (app.Environment.IsDevelopment()){    app.UseCors("DevCorsPolicy");}else{    app.UseCors("MyCorsPolicy"); // 生产环境使用严格策略}

总结

通过合理配置ASP.NET Core跨域策略,我们可以轻松处理包括预检请求处理在内的各种跨域场景。记住,CORS不仅是功能需求,更是安全机制。在生产环境中,务必限制WithOrigins为可信域名,并谨慎使用AllowCredentials

掌握CORS配置和理解.NET Web API跨域机制,是每一位后端开发者必备的技能。希望本教程能帮助你彻底解决跨域难题!