在ASP.NET中管理许多第三方API密钥的变体

时间:2010-04-19 16:46:09

标签: c# asp.net api api-key

我有一个利用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
}

我想知道跟踪所有这些键有什么更好的方法。我考虑了两个可行的方法:

  1. 在我的web.config中使用应用设置:虽然这里有一个问题,地图键经常会根据主机名进行更改(即地图键的许多变体都是管理的噩梦)
  2. 有一个C#类来根据主机名处理所有这些键:我可以编写一个静态类,它具有分析键和map键的属性,并且基于Request.Url.Host我可以将属性设置为他们的适当价值。这个方法本质上是我的switch方法,包含在一个帮助类中。

2 个答案:

答案 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)