iis 环境.getEnvironmentVariable找不到变量值

i7uq4tfw  于 2022-11-12  发布在  其他
关注(0)|答案(7)|浏览(258)

为什么Environment.GetEnvironmentVariable("variableName")在从IIS上托管的webMethod中进行调用时无法获取变量的值,而在从同一台计算机上的控制台应用程序中调用它时可以工作?
我应该在哪里设置这些变量以使其对IIS Web服务可见?我应该使用Environment.GetEnvironmentVariable(name, target)中的第二个参数来获取它吗?
其实很简单:

[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
    return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}

顺便说一下,VARIABLE_NAME_HERE是在系统和用户级别设置的。

cygmwpex

cygmwpex1#

重新启动Visual Studio为我修复了它(我猜IIS Express也缓存了这些值)。

xiozqbni

xiozqbni2#

我也遇到过同样的问题,多亏了谢尔盖的回答,我想出了这个办法,而且奏效了:

var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)

最重要的是使用EnvironmentVariableTarget.User

mf98qq94

mf98qq943#

阅读此处了解更多信息:
Using System Wide Environment Variables in .NET Application
具体而言:
什么是系统环境变量?
环境变量是保存有关系统中整个环境的信息的字符串。这些字符串值是动态的,它们可以影响系统的行为方式。环境变量可以分为两种主要类型:

系统变量:无论当前用户是谁,它们都会影响整个系统。它们由Windows定义并保存在注册表中。您必须是管理员才能修改它们。通常需要重新启动计算机才能使这些更改生效。
用户变量:它们影响当前系统用户的当前环境。任何系统用户都可以删除、修改和添加它们。它们由Windows安装程序、某些程序和用户使用。对这些变量的更改将保存到注册表中,并立即生效。

如果您尝试访问的环境变量在您的计算机上不存在,则会出现问题。您必须尝试查找的变量存在于本地计算机上,但不在Web服务的主机上。

pxy2qtax

pxy2qtax4#

您需要使用iisreset命令重新启动IIS。

a64a0gku

a64a0gku5#

cmd、PowerShell和Visual Studio(也可能是VS Code)共享一个DLL或一些代码片段,在加载环境变量时缓存这些变量(分别为每个应用程序)。
因此,如果您正在测试某个需要更改环境变量的项目,您可以启动一个单独的cmd或PowerShell进行测试,更改环境变量,然后重新启动该cmd或PowerShell,而不是重新启动IDE(这会很慢)。我推荐使用PowerShell,因为您可以使用向上箭头重复使用在以前的会话中键入的命令。

kgsdhlau

kgsdhlau6#

我的项目的csproj文件没有(或不需要)local.settings.json。通过添加它的更新节点,Environment.GetEnvironmentVariable(“variablename”)开始工作并从变量中获取信息。

<ItemGroup>
    <None Update="host.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
</ItemGroup>
au9on6nz

au9on6nz7#

我遇到了同样的问题。如果Environment.GetEnvironmentVariable()不起作用,就在program.cs文件中设置它的值。在我的例子中,我在appsettings.json文件中有这个值,所以我可以在program.cs中设置这个值,如下所示:

Environment.SetEnvironmentVariable("ASPNETCORE_APIURL", builder.Configuration.GetSection("Urls").GetSection("APIUrl").Value);

相关问题