c# - 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");
}
解决方案
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 上搜索更多信息。
推荐阅读
- java - 无法使用 distroless-debug 访问 jarfile docker
- r - 如何比较由另一列分组的列并在 R 的新列中给出输出?
- sql - SELECT 返回多个值的 INSERT 引发错误“子查询返回超过 1 个值”
- java - org.testng.TestNGException:实例化类tests.LoginTests时发生错误。检查以确保它可以被实例化
- android - Android Studio 错误:安装失败并显示消息 INSTALL_FAILED_NO_MATCHING_ABIS:无法提取本机库,res=-113
- android - 动画中出现多个帧 - Kotlin
- azure - 如何为 PHP 应用程序设置 Azure Monitor
- java - 使用消息重定向 ModelAndView
- python - 在 python 中使用 .remove() 和 .append() 将子列表元素之一替换为新元素
- c++ - Graphics.h 不想使用 CodeBlocks