C# 有没有办法使用';AllowAnyOrigin';在.NET Core中的公司策略上的属性?
我目前正在.Net核心应用程序中开发集成Cors。我以前在完整的.NET框架(4.6.1)中处理过Cors,它能够在给定的Cors策略中设置C# 有没有办法使用';AllowAnyOrigin';在.NET Core中的公司策略上的属性?,c#,.net-core,cors,C#,.net Core,Cors,我目前正在.Net核心应用程序中开发集成Cors。我以前在完整的.NET框架(4.6.1)中处理过Cors,它能够在给定的Cors策略中设置AllowAnyOrigin属性 正如前面提到的,我已经编写了一个.NET核心WebApi,我正在尝试将Cors实现到其中。我让它从存储在我的appSettings.json中的AppSetting读取,它可以是以下三种内容之一: 如果appsetting设置为星号,那么我希望看到AllowAnyOrigin属性,就像我在完整的.NET framework
AllowAnyOrigin
属性
正如前面提到的,我已经编写了一个.NET核心WebApi,我正在尝试将Cors实现到其中。我让它从存储在我的appSettings.json
中的AppSetting读取,它可以是以下三种内容之一:
- 如果appsetting设置为星号,那么我希望看到AllowAnyOrigin属性,就像我在完整的.NET framework中所做的那样。(这就是我的问题所在。)
- 如果appsetting设置为逗号分隔的字符串,例如
,然后根据需要将其应用于策略https://example.com, https://test.com
- 如果appsetting已被注释掉或保留为空,则我正在从Azure表存储中读取行列表,以提供给定来源的列表
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中间件来帮助制定自定义策略。有一篇很棒的文章,名为《我将为您总结有趣的部分:
要仅允许对资源使用GET方法,在定义CORS策略时,可以使用WithMethods
方法:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin",
builder => builder.WithOrigins("http://localhost:55294")
.WithMethods("GET"));
});
如果需要允许任何来源访问资源,将使用AllowAnyorOrigin而不是WithOrigins:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin",
builder => builder.AllowAnyOrigin());
});
作为对这一切的回答,也许有人能从这个问题中得到帮助。我查看了类中AllowAnyOrigin方法的源代码,并了解了如何处理它。我差点就找到了解决办法,只是忘了事先清理原产地清单
_policy.Origins.Clear();
_policy.Origins.Add(CorsConstants.AnyOrigin);
谢谢你的回复!目前,我在配置服务时只使用了
services.AddCors
,因为这一切都是通过我的自定义中间件完成的。这为我提供了要使用的策略,而不是在AddCors
或UseCors
中使用lambda构建它。