Ядро ASP.NET в IIS, (ICollection / List / Array) appsettings.json -> web.config - PullRequest
2 голосов
/ 06 марта 2019

Используя шаблон параметров Я создал класс со свойством ICollection<string> allowedHosts.Внутри appsettings.json я добавил [ "google.nl", "bing.com" ], и когда приложение работает в режиме разработки, все в порядке.

Однако в работе мы используем IIS и с помощью редактора конфигурации IIS, чтобы определитьenvironmentVariables, и это сохраняется как web.config и будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
                <environmentVariable name="AllowedHosts" value="How to format?" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</configuration>

Моя проблема: как я могу преобразовать этот JSON из appsettings.json:

{
  "allowedHosts": [ "google.com", "bing.com" ]
}

В XML для файла web.config?Я попытался использовать ["google.com"], "google.com", но ни один из них не работает.

Редактировать: я использовал неверное имя свойства, в этом случае AllowedHosts имеет другое использование, и я должен изменить имя свойства.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

AllowedHosts - это специальная конфигурация, которая принимает список имен хостов, разделенных точкой с запятой, без номеров портов. Подробнее см. Фильтрация хостов .

Если вам нужно разрешить несколько хостов, вы можете настроить его следующим образом:

<aspNetCore processPath="dotnet" arguments=".\abc.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
    <environmentVariables>
        <environmentVariable name="AllowedHosts" value="google.com;bing.com" />
    </environmentVariables>
</aspNetCore>

Если вы хотите получить массив из конфигурации Web.Config, вы можете изменить имя ключа на:

<key-name>:<index>

например. :

<environmentVariables>
    <environmentVariable name="AllowedHosts:0" value="google.com" />
    <environmentVariable name="AllowedHosts:1" value="bing.com" />
</environmentVariables>

Чтобы получить массив в ASP.NET Core:

var allowed =  _config.GetSection("AllowedHosts").AsEnumerable();

/* output :
[  
   {  
      "key":"AllowedHosts",
      "value":"*"
   },
   {  
      "key":"AllowedHosts:1",
      "value":"bing.com"
   },
   {  
      "key":"AllowedHosts:0",
      "value":"google.com"
   }
]
*/
0 голосов
/ 06 марта 2019

Не могли бы вы настроить это в своем классе запуска?https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2

...