跨域请求设置(CORS,Cross‐Origin Resource Sharing) - daniel-qa/Vue GitHub Wiki

跨域请求设置(CORS,Cross-Origin Resource Sharing)

在 ASP.NET Core 中,跨域请求设置(CORS,Cross-Origin Resource Sharing)允许你指定哪些外部域可以访问你的应用程序

对于支持跨域的 API 请求和资源共享非常重要。以下是你提供的代码中的 CORS 设置的详细解释,以及如何根据需要配置和管理 CORS 策略。

  • CORS 配置代码

在你提供的 Startup 类中,CORS 配置代码如下:

public void ConfigureServices(IServiceCollection services)
{
    // 设置 CORS 策略
    services.AddCors(options =>
    {
        options.AddPolicy(MyAllowSpecificOrigins,
        builder =>
        {
            builder.WithOrigins("http://teammodelos-test.chinacloudsites.cn",
                                "https://www.teammodel.cn", "https://localhost:5001",
                                "http://localhost:5000", "http://localhost:64524",
                                "https://localhost:44341", "https://localhost:8888", "http://localhost:8888")
                   .AllowAnyHeader()
                   .AllowAnyMethod();
        });
    });

    // 其他服务配置...
}
  • CORS 配置解释

1 .添加 CORS 策略

services.AddCors(options =>
{
    options.AddPolicy(MyAllowSpecificOrigins,
    builder =>
    {
        builder.WithOrigins("http://teammodelos-test.chinacloudsites.cn",
                            "https://www.teammodel.cn", "https://localhost:5001",
                            "http://localhost:5000", "http://localhost:64524",
                            "https://localhost:44341", "https://localhost:8888", "http://localhost:8888")
               .AllowAnyHeader()
               .AllowAnyMethod();
    });
});

AddCors: 通过 IServiceCollection 的 AddCors 方法注册 CORS 服务。

AddPolicy: 定义一个名为 MyAllowSpecificOrigins 的 CORS 策略。策略中指定了允许的源(WithOrigins)、允许的请求头(AllowAnyHeader)和允许的方法(AllowAnyMethod)。

2 .使用 CORS 策略

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();

    app.UseCors(MyAllowSpecificOrigins); // 使用定义的 CORS 策略

    // 其他中间件配置...
}

UseCors: 在请求管道中使用定义的 CORS 策略。将 MyAllowSpecificOrigins 策略应用于请求处理流程。

  • CORS 配置选项

在配置 CORS 策略时,可以使用以下选项来控制允许的行为:

WithOrigins: 允许指定的源访问 API。例如,builder.WithOrigins("https://example.com") 允许来自 https://example.com 的请求。

AllowAnyHeader: 允许任何请求头。如果你想限制允许的请求头,可以使用 WithHeaders 方法,例如 builder.WithHeaders("Content-Type", "Authorization")。

AllowAnyMethod: 允许任何 HTTP 方法。如果你想限制允许的方法,可以使用 WithMethods 方法,例如 builder.WithMethods("GET", "POST")。

AllowCredentials: 允许发送凭据(如 cookies 和 HTTP 认证信息)。默认为禁用,如果需要启用,可以使用 builder.AllowCredentials()。

SetIsOriginAllowed: 允许动态确定哪些源可以访问。

例如,你可以使用 builder.SetIsOriginAllowed(origin => origin.StartsWith("https://example.com")) 来只允许 https://example.com 下的子域。