首页 > 解决方案 > 在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略

问题描述

我有一个像这样定义的全球 CORS 政策

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // global cors policy
    app.UseCors("MyPolicy");
}

我必须指定全局策略,因为我使用的是 SignalR。该策略允许网站的域。此外,我需要为拥有许多不同域的合作伙伴提供数量有限的端点。

如何允许从任何来源访问特定控制器(从全局策略中排除并添加自定义策略)?

标签: c#asp.net-corecorssignalrasp.net-core-webapi

解决方案


在 StartUp.cs 你可以配置 corsConfigureService

 readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy(name: MyAllowSpecificOrigins,
                              builder =>
                              {
                                  builder.WithOrigins("http://example.com",
                                                      "http://www.contoso.com");
                              });
        });
    }

然后在Configure功能中,您可以配置每个映射的 SignlR 集线器的 cors:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        ...
        app.UseCors();
        ...
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            //Map each hub and ad RequireCors per hub
            endpoints.MapHub<EchoHub>("echo")
                .RequireCors(MyAllowSpecificOrigins);

            endpoints.MapRazorPages();
        });
    }

推荐阅读