我正在为.Net
项目设置开发模板。为此,我正在使用dot-net-cas-client进行ADFS支持的身份验证。问题是,有时我们的CAS开发人员会将服务更改/迁移到新的URL。
因此,如果有许多项目正在进行中,并且CAS URL的更新已更改。我不想为每个活动项目的web.config file
手动更新CAS URL位置(我确实考虑过创建一个Powershell脚本,该脚本将读取所有搜索web.config
文件的服务器目录,然后逐行读取,捕获要替换的CAS URL字符串,但这似乎已过时,可能会有问题)。
我希望在系统或机器级别使用环境变量,这样web.config
文件可以引用一个位置并在那里获取当前URL。因此,当/如果发生更改,只需更新一个位置。
[我看到我可以添加一个键来获取环境变量的值并在项目代码中使用它,但是我没有找到关于然后直接在web.config
文件中使用该键或引用的任何信息。
我试图创建和引用键,直接引用环境变量%environmentVariableName%
,但是不确定web.config
中是否可能。
我试图直接引用变量%system.variable%
,但未获得环境变量值。
[dot-net-cas-client
设置:
<casClientConfig casServerLoginUrl="https://example.com/cas/login"....
替换为:
<casClientConfig casServerLoginUrl="%environmentVariableName%"....
OR
<casClientConfig casServerLoginUrl=%environmentVariableName%....
OR
<casClientConfig casServerLoginUrl=Environment.ExpandEnvironmentVariables(ConfigurationManager.AppSetting("environmentVariableName"))....
首先抛出错误(缺少引号),或者请求将我发送到...%environmentVariableName%...
,而不是...example.com/cas/login...
我知道您可以添加一个我也尝试过的密钥:
<add key='SomeSetting' value='%environmentVariableName%'/>
但是在web.config
文件的设置中没有看到直接引用该KEY的任何信息。
dot-net-cas-client
“ casServerLoginUrl”和其他属性期望用引号引起来的字符串。或将我定向到我的URL,但使用%environmentVariableName%
而不是存储在该变量中的值。
是的,我也希望对AWS发布到环境变量也做类似的事情。我还没有找到银弹,但这就是我所发现的。
如果您要使用上面描述的方式,则变量不会自动扩展(尽管在AZURE / .NETcore中它们确实可以扩展?):How do you put environmental variables in web.config?您必须自己扩展所有用途-(也许包装函子会很好)您还可以使用Environment.GetEnvironmentVariable(myvar)
var someSetting = Environment.ExpandEnvironmentVariables(
ConfigurationManager.AppSetting("SomeSetting"))
OR
Powershell方式(如您先前所述,对我来说似乎也很棘手,但可能是最好的解决方案)https://anthonychu.ca/post/overriding-web-config-settings-environment-variables-containerized-aspnet-apps/