在 .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 中无法工作