web.config中的静态值

时间:2011-05-10 11:10:01

标签: asp.net asp.net-mvc web-config

我有一个在2台服务器上运行的项目。 1个测试服务器,连接到testDB,另一个在真实服务器上,带有真正的数据库。

此项目的每个正在运行的实例中唯一不同的是web.config。

我想做的是有可能在web.config中设置一个bool值,然后可以通过代码读取。如果应用程序处于测试模式,则此bool将为true。我会手动设置它,然后项目会把它读出来,当它确实是,应用程序发送的邮件,然后将保留在内部,所以人们实际上不会收到邮件。之前我在public static bool中设置了global.asax,但在Asp.net MVC中,所有内容都内置在一个DLL中,所以在这种情况下我无法在部署的服务器上更改它。

这可能吗?还是会有一个很好的其他解决方案?

6 个答案:

答案 0 :(得分:18)

正如其他人所说,这是你的web.config的appSettings部分用于

<configuration>
  <appSettings>
    <add key="isInTestMode" value="true"/>
  </appSettings>
  ...
</configuration>

然后可以使用WebConfigurationManager

访问
bool isInTestMode = Boolean.Parse(WebConfigurationManager.AppSettings["isInTestMode"]);

<强>然而

如果您只对测试时不发送电子邮件感兴趣,那么您可以使用web.config配置.NET以将电子邮件转储到本地目录,而不是将它们发送到邮件服务器

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="C:\MailDump\" />
      <network host="localhost"/>
    </smtp>
  </mailSettings>
  ...
</system.net>

如果您的代码未覆盖默认邮件SMTP服务器设置,则此功能将起作用。

答案 1 :(得分:3)

是的,你可以:

<configuration>
  <appSettings>
    <add key="TestingMode" value="True" />
  </appSettings>
   ...
</configuration>

您可以使用以下内容获取:

static public String GetWebConfigKey(string appSettingsKey)
    {
        String value = "";

        System.Configuration.AppSettingsReader asr = new System.Configuration.AppSettingsReader();

        try
        {
            value = asr.GetValue(appSettingsKey, System.Type.GetType("System.String")).ToString();
        }
        catch (KeyNotFoundException knfe)
        {
            throw new KeyNotFoundException("KeyNotFoundException occured in UtilityLibrary.WebConfig.getWebConfigKey" + knfe.Message);
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

        return value;
    }

我通常使用Enum作为我的app键来保持它们的强类型,这使得它们更快更容易查找而不是通过web.config

答案 2 :(得分:2)

为什么不使用appSettings

<configuration>
    <appSettings>
        <add key="myValue" value="true"/>
    </appSettings>
        ....

答案 3 :(得分:1)

您可以使用您的Web.Config执行此操作,使用appSetting(ConfigurationManager.AppSetting [“Key”])

或者,如果yuor app在测试服务器上以调试模式运行,则可以执行此操作,

 #if (DEBUG)

 //Debug

#else

  //Live

#endif

答案 4 :(得分:0)

ASP.Net WebDeploy允许您根据部署的位置自动转换web.config。例如,它可以在部署到测试服务器时发送一个连接字符串,在部署到实时服务器时发送不同的连接字符串。

http://www.iis.net/download/WebDeploy

答案 5 :(得分:0)

如果您使用的是Visual Studio 2010,我建议您使用Transformation文件转换web.config。你拥有的差异越多,这对你有所帮助。

高级步骤:

  1. 通过配置管理器
  2. 创建新的构建配置
  3. 在每个新创建的配置文件中正确设置值
  4. 构建和发布
  5. 完成并且永远不必记住更改多个配置文件中的值(开发,登台,发布等)。
  6. http://msdn.microsoft.com/en-us/library/dd465318.aspx