.NET 8 ASP.NET Core 设置允许跨域(CORS)完整配置指南

在现代 Web 开发中,前端和后端通常部署在不同的域上,这就需要通过 CORS(跨源资源共享)机制来允许跨域请求。在 .NET 8 中,ASP.NET Core 提供了简洁而灵活的方式来配置 CORS。

什么是 CORS?

浏览器的同源策略(Same-Origin Policy)限制了从一个源加载的文档或脚本如何与来自不同源的资源进行交互。CORS 是一种机制,允许服务器声明哪些源可以访问其资源,从而实现跨域请求。

在 .NET 8 中配置 CORS

在 .NET 8 中,CORS 的配置通常在 Program.cs 文件中完成。以下是一个基本的配置示例:

var builder = WebApplication.CreateBuilder(args);

// 添加 CORS 服务
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrigin", policy =>
    {
        policy.WithOrigins("https://example.com")
              .AllowAnyMethod()
              .AllowAnyHeader();
    });
});

var app = builder.Build();

// 使用 CORS 策略
app.UseCors("AllowSpecificOrigin");

app.MapGet("/", () => "Hello World!");

app.Run();

在上述代码中,AddCors 方法用于添加 CORS 服务,AddPolicy 方法定义了名为 "AllowSpecificOrigin" 的策略,允许来自 https://example.com 的请求。

常见的 CORS 配置选项

在配置 CORS 策略时,可以使用以下方法来精细控制跨域请求:

  • WithOrigins(string[] origins):指定允许的源。
  • AllowAnyMethod():允许所有 HTTP 方法(如 GET、POST、PUT 等)。
  • AllowAnyHeader():允许所有请求头。
  • AllowCredentials():允许发送凭据(如 Cookies)。
  • SetPreflightMaxAge(TimeSpan maxAge):设置预检请求的缓存时间。

根据实际需求,可以组合使用这些方法来定义适合的 CORS 策略。

在控制器或操作方法上启用 CORS

除了在全局配置 CORS 策略外,还可以在特定的控制器或操作方法上启用 CORS:

[EnableCors("AllowSpecificOrigin")]
public class MyController : ControllerBase
{
    // 控制器代码
}

使用 [EnableCors] 特性可以为特定的控制器或操作方法应用 CORS 策略。

调试和常见问题

  • 预检请求失败:如果浏览器发送预检请求(OPTIONS),但服务器未正确响应,可能会导致 CORS 错误。确保服务器能够处理 OPTIONS 请求,并返回适当的 CORS 头。
  • 凭据问题:如果允许凭据(如 Cookies),需要确保 AllowCredentials 与 WithOrigins 一起使用,且不能与 AllowAnyOrigin 一起使用。
  • 跨域请求被阻止:检查浏览器控制台中的 CORS 错误信息,确保服务器返回了正确的 CORS 头。

在 .NET 8 中,配置 CORS 是实现前后端分离架构中跨域通信的关键步骤。通过灵活配置 CORS 策略,可以确保安全、可靠的跨域请求。

评论