在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略

Posted

技术标签:

【中文标题】在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略【英文标题】:Define different (than global) CORS policy for WEB API controller in .Net Core 【发布时间】:2021-09-01 17:03:00 【问题描述】:

我有一个像这样定义的全局 CORS 策略

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    // global cors policy
    app.UseCors("MyPolicy");

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

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

【问题讨论】:

看来你可以使用属性来实现这一点。也许 asp.net 核心文档中的 this link 可以帮助您。 @b2f 是的,但我必须在 Configure 中设置全局策略,因为属性不能与 SignalR 等隐藏控制器一起使用。 【参考方案1】:

在 StartUp.cs 中,您可以在 ConfigureService 中配置 cors

 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();
        );
    

【讨论】:

好的。如何为另一个控制器添加不同的策略?

以上是关于在 .Net Core 中为 WEB API 控制器定义不同的(不同于全局的)CORS 策略的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证

如何在 Web API .NET Core 的控制器之外获取当前用户

带有 Javascript 的 Dot Net Core Web API - CORS 策略错误

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

如何在 ASP.NET Core Web API 控制器中接收字节数组和标头内容

在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件