我目前正在.Net Core应用程序中的集成Cors。我以前在完整的.NET Framework(4.6.1)中处理过Cors,它可以在给定的CorsPolicy中设置AllowAnyOrigin
属性。
就像前面提到的,我编写了一个.NET Core WebApi,我正在尝试将Cors实现到其中。我从存储在appSettings.json
中的AppSetting中读取内容,从中可以得出以下三点:
https://example.com, https://test.com
,则会根据需要将其应用于策略。下面是我之前处理过的完整.NET框架的示例。
var origins = ConfigurationManager.AppSettings[KeyCorsAllowOrigin];
switch (origins)
{
case null:
_corsPolicy.Origins.Clear();
foreach (var item in new StorageConfigurationManager().GetRowKeys())
{
_corsPolicy.Origins.Add("https://" + item);
}
break;
case "*":
_corsPolicy.AllowAnyOrigin = true;
break;
default:
_corsPolicy.AllowAnyOrigin = false;
if (!string.IsNullOrWhiteSpace(origins)) AddCommaSeparatedValuesToCollection(origins, _corsPolicy.Origins);
break;
}
我认为我可以在.NET Core和Microsoft.AspNetCore.Cors.Infrastructure
包中复制此功能,但是似乎Microsoft限制了对该属性的设置访问,并且只能从中读取。
有人知道如何设置吗?
我知道您可以在管道中构建CorsPolicy,然后使用.AllowAnyOrigin()
,但是我目前正在使用自定义的Cors中间件来帮助我的自定义策略。
答案 0 :(得分:0)
有一篇很棒的文章叫做Enabling CORS in ASP.NET Core,我将为您总结有趣的部分:
仅在资源上允许GET方法,可以在定义CORS策略时使用WithMethods
方法:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin",
builder => builder.WithOrigins("http://localhost:55294")
.WithMethods("GET"));
});
如果需要允许任何源访问资源,则将使用AllowAnyOrigin代替WithOrigins:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin",
builder => builder.AllowAnyOrigin());
});
答案 1 :(得分:0)
仅作为对所有这些问题的解答,所以也许有人可以得到这个问题的帮助。我查看了CorsPolicyBuilder类中AllowAnyOrigin方法的源代码,并了解了如何处理它。我几乎有解决方案,只是忘了事先清除Origins列表。
_policy.Origins.Clear();
_policy.Origins.Add(CorsConstants.AnyOrigin);