Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法使用';AllowAnyOrigin';在.NET Core中的公司策略上的属性?_C#_.net Core_Cors - Fatal编程技术网

C# 有没有办法使用';AllowAnyOrigin';在.NET Core中的公司策略上的属性?

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

我目前正在.Net核心应用程序中开发集成Cors。我以前在完整的.NET框架(4.6.1)中处理过Cors,它能够在给定的Cors策略中设置
AllowAnyOrigin
属性

正如前面提到的,我已经编写了一个.NET核心WebApi,我正在尝试将Cors实现到其中。我让它从存储在我的
appSettings.json
中的AppSetting读取,它可以是以下三种内容之一:

  • 如果appsetting设置为星号,那么我希望看到AllowAnyOrigin属性,就像我在完整的.NET framework中所做的那样。(这就是我的问题所在。)
  • 如果appsetting设置为逗号分隔的字符串,例如
    https://example.com, https://test.com
    ,然后根据需要将其应用于策略
  • 如果appsetting已被注释掉或保留为空,则我正在从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中间件来帮助制定自定义策略。

有一篇很棒的文章,名为《我将为您总结有趣的部分:

要仅允许对资源使用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构建它。