如何在ASP.NET Core 3.1应用程序中基于URL进行单独的IIS Express配置?

问题描述

我有一个项目要发布在IIS服务器上的两个不同地址上:https://domain/test1/https://domain/test2/。根据我发布的地址,我想为我的项目使用不同的配置设置,为简化起见,我们假设该配置为条目email。 因此,对于地址https://domain/test1/,我要配置email: [email protected],对于https://domain/test2/,要email: [email protected]

我尝试更改launchSettings.json文件中的配置,但是我无法添加具有相同名称的条目,如果更改了条目的名称,那么它将不知道使用IISExpress来发布它。

    "IIS Express": {
       "commandName": "IISExpress","launchbrowser": true,"applicationUrl": "https://domain/test1","email": "[email protected]","environmentvariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
       }
    },"IIS Express": {
       "commandName": "IISExpress","applicationUrl": "https://domain/test2","email": "[email protected]","environmentvariables": {
           "ASPNETCORE_ENVIRONMENT": "Development"
       }
    },

如何基于ASP.NET Core 3.1中的当前URL地址进行单独的配置?

解决方法

据我所知,launchSettings.json文件仅在本地开发计算机上使用,并且未部署。它仅由Visual Studio使用。

因此,如果您在launchSettings.json中设置了电子邮件设置,它将不会部署到生产服务器,也将不会使用。

此外,正如Lex所说,没有满足您要求的功能。

我建议您考虑使用appsetting.json和Environment变量来满足您的要求。

您可以使用不同的环境创建多个appsetting.json。

enter image description here

发布后,您可以打开applicationHost.config,指定站点位置并按如下所示设置其他环境变量。

注意:此解决方法仅适用于路径为IIS网站名称的其他IIS网站名称。

applicationHost.config路径:C:\Windows\System32\inetsrv\config\

<location path="domainA">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>
<location path="domainB">
    <system.webServer>
        <aspNetCore>
            <environmentVariables>
                <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
            </environmentVariables>
        </aspNetCore>
    </system.webServer>
</location>