Есть ли способ использовать свойство AllowAnyOrigin на CorsPolicy в .NET Core? - PullRequest
0 голосов
/ 17 января 2019

В настоящее время я работаю над интегрированным Cors в приложении .Net Core. Ранее я имел дело с Cors в рамках полной .NET Framework (4.6.1), которая имела возможность устанавливать свойство AllowAnyOrigin в рамках данного CorsPolicy.

Как упоминалось ранее, я написал .NET Core WebApi, в который я пытаюсь внедрить Cors. У меня есть чтение из AppSetting, хранящееся в моем appSettings.json, из которого могут быть три вещи:

  • Если для appsetting задана звездочка, я хотел бы видеть свойство AllowAnyOrigin, как я это делал в полной .NET Framework. (Вот где моя проблема.)
  • Если для 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, чтобы помочь с моей настраиваемой политикой.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Так же, как ответ на все это, и, возможно, кто-то может помочь этим вопросом. Я посмотрел исходный код метода AllowAnyOrigin в классе CorsPolicyBuilder и увидел, как это обрабатывается. У меня чуть было не было решения, просто забыл заранее очистить список Origins.

_policy.Origins.Clear();
_policy.Origins.Add(CorsConstants.AnyOrigin);
0 голосов
/ 17 января 2019

Есть отличная статья под названием Включение CORS в ASP.NET Core Я подведу для вас интересную часть:

чтобы разрешить только методы GET для вашего ресурса, вы можете использовать метод WithMethods при определении политики CORS:

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());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...