IIS中的ASP.NET Core((ICollection / List / Array)appsettings.json-> web.config

时间:2019-03-06 07:37:22

标签: json iis asp.net-core web-config appsettings

使用Options pattern创建了一个具有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>

我的问题是:如何从appsettings.json转换此JSON:

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

使用web.config文件的XML?我尝试使用["google.com"]"google.com",但没有一个起作用。

编辑:我使用了错误的属性名称,在这种情况下,AllowedHosts的用法有所不同,我应该更改属性名称。

2 个答案:

答案 0 :(得分:0)

AllowedHosts是一种特殊的配置,它接受用分号分隔的主机名列表,而不包含端口号。 有关更多详细信息,请参见Host filtering

如果需要允许多个主机,则可以如下配置:

<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"
   }
]
*/

答案 1 :(得分:0)