有没有办法在 .NET Core 的 CorsPolicy 上使用“AllowAnyOrigin”属性?
Posted
技术标签:
【中文标题】有没有办法在 .NET Core 的 CorsPolicy 上使用“AllowAnyOrigin”属性?【英文标题】:Is there a way to use the 'AllowAnyOrigin' property on a CorsPolicy within .NET Core? 【发布时间】:2019-06-11 14:51:33 【问题描述】:我目前正在开发 .Net Core 应用程序中的集成 Cors。我之前在完整的 .NET Framework (4.6.1) 中处理过 Cors,它能够在给定的 CorsPolicy 中设置 AllowAnyOrigin
属性。
如前所述,我编写了一个 .NET Core WebApi,我正在尝试在其中实现 Cors。我从存储在我的appSettings.json
中的 AppSetting 中读取它,它可以是三件事:
https://example.com, https://test.com
,则会根据需要将其应用于策略。
如果应用设置已被注释掉或留空,那么我正在从 Azure 表存储读取行列表以提供给定来源的列表。
下面是我之前处理过的完整 .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 中间件来帮助我的自定义策略。
【问题讨论】:
【参考方案1】:只是作为所有这些的答案,因此也许有人可以通过这个问题得到帮助。我查看了 CorsPolicyBuilder 类中 AllowAnyOrigin 方法的源代码,并了解了它是如何处理的。我差点找到解决方案,只是忘记事先清除 Origins 列表。
_policy.Origins.Clear();
_policy.Origins.Add(CorsConstants.AnyOrigin);
【讨论】:
【参考方案2】:有一篇很棒的文章叫做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());
);
【讨论】:
感谢您的回复!目前,我只在配置我的服务时使用services.AddCors
,因为这一切都是通过我的自定义中间件完成的。这为我提供了使用策略,而不是在 AddCors
或 UseCors
中使用 lambda 构建它。以上是关于有没有办法在 .NET Core 的 CorsPolicy 上使用“AllowAnyOrigin”属性?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 .NET Core 的单元测试中查看生成的日志消息?
有没有办法为 ASP.NET Core 中的内容设置通用根路径?
我正在为我的测试项目使用 MStest (.net core),有没有办法在失败时继续执行测试?
有没有办法在 Asp.Net Core Identity 中将 PasswordHash 的数据类型从字符串更改为字节数组