首页 > 解决方案 > ASP.NET Core - 如何在 IIS 中托管后读取 EnvironmentVariableTarget

问题描述

MyConnString在 Windows 10 中手动设置了系统的环境变量。我正在尝试从代码中读取它。在 Visual Studio 中,我可以获得MyConnString使用EnvironmentVariableTarget.User.

但在 IIS 中发布和托管后, 的值MyConnString返回为空/null。我的日志没有打印 'MyConnString' 值。

我的连接字符串很敏感,不能成为任何配置文件的一部分。我感谢您的帮助。

我正在使用 ASP.NET Core 3.1,我的应用程序池标识是ApplicationPoolIdentity. 我也在Load User Profile应用程序池中设置了 true。

var content = Environment.GetEnvironmentVariable("MyConnString", EnvironmentVariableTarget.User);

if (string.IsNullOrWhiteSpace(content))
{
    content = Environment.GetEnvironmentVariable("MyConnString", EnvironmentVariableTarget.Machine);
}

if (string.IsNullOrWhiteSpace(content))
{
    content = Environment.GetEnvironmentVariable("MyConnString", EnvironmentVariableTarget.Process);
}

if (string.IsNullOrWhiteSpace(content))
{
    content = Environment.GetEnvironmentVariable("MyConnString");
}

标签: c#.netasp.net-core.net-coreasp.net-core-mvc

解决方案


IIS的用户不是您的用户。

第一个选项

您需要为IIS进程的用户所有者设置变量。

第二个选项

在您的 web.<environment>.config 中使用环境变量,以便在您部署的每个服务器中兼容。

web.Staging.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location>
        <system.webServer>
            <aspNetCore>
                <environmentVariables xdt:Transform="InsertIfMissing">
                    <environmentVariable name="MyConnString"
                                         value="my db conn string"
                                         xdt:Locator="Match(name)"
                                         xdt:Transform="InsertIfMissing" />
                </environmentVariables>
            </aspNetCore>
        </system.webServer>
    </location>
</configuration>

您还有其他可能为目标服务器设置环境变量,请在 G 上搜索更多信息。


推荐阅读