我有一个利用Google Analytics和Google Maps的网站。这两种服务都有API密钥,需要在我们网站的代码中进行管理。对于Google Analytics,我们有两个帐户,一个真实帐户和一个临时帐户,用于在午餐前测试跟踪。对于Google Maps,我们实际上需要为每个主机名提供唯一的API密钥。我们有几个暂存域和本地主机名,因此我们的地图代码可以切换到API密钥。
现在我使用Request.Url.Host
上的开关管理各个页面的C#代码隐藏中的密钥:
// for analytics in file1
switch (Request.Url.Host) {
case "staging": ltlUACode.Text = "stageKey"; break;
case "client.stage.com": ltlUACode.Text = "stageKey"; break;
case "www.livesite.com": ltlUACode.Text = "liveKey"; break;
case "livesite.com": ltlUACode.Text = "liveKey"; break;
}
// for maps in file2
switch(Request.Url.Host) {
case "staging": GoogleMapsKey = "uniqueKey1"; break;
case "client.stage.com": GoogleMapsKey = "uniqueKey2"; break;
case "www.livesite.com": GoogleMapsKey = "uniqueKey3"; break;
// etc
}
我想知道跟踪所有这些键有什么更好的方法。我考虑了两个可行的方法:
web.config
中使用应用设置:虽然这里有一个问题,地图键经常会根据主机名进行更改(即地图键的许多变体都是管理的噩梦)Request.Url.Host
我可以将属性设置为他们的适当价值。这个方法本质上是我的switch方法,包含在一个帮助类中。答案 0 :(得分:0)
两者都做:
由于它们不是真正的代码,因此存储Domain => ApiKey在Web配置中配对。对于类似web.config设置的大块,它对create custom sections and handlers很有帮助。这里额外工作的好处是你可以扩展自定义部分处理程序的功能,以便根据环境返回正确的值。
创建一个自定义部分类型,然后为每个api密钥添加一个(该类型的)部分(地图,分析等)。
答案 1 :(得分:0)
我通常将它们分成自己的文件,然后根据它们的位置部署不同的配置文件。
的web.config
<appSettings configSource="Host1.config">
</appSettings>
C#
System.Configuration.ConfigurationManager.AppSettings(fieldname)