以编程方式更改web.config

时间:2014-01-08 06:47:39

标签: c# asp.net

我开发了一个使用httpmodules的自定义模块,当我的模块安装时,需要将其添加到web.config中,并在卸载我的模块时将其从中删除。到目前为止我一直在做的是修改我的web.config文件,在安装模块后立即手动添加必要的部分,并在卸载模块之前将其删除。该部分如下所示:

 <httpModules>
    <add type="QueryStringModule" name="QueryStringModule"/>
</httpModules> 

现在我想知道是否可以自动执行此任务,即以编程方式修改web.config。我用谷歌搜索,但他们不适合我。这个问题在asp.net中是否有任何方法。谢谢。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

using System.Web.Configuration;

// ...

var config = WebConfigurationManager.OpenWebConfiguration("/web.config");
var modules = config.GetSection("system.web/httpModules") as HttpModulesSection;

另外,我认为,这也可行(无需明确指定配置源):

using System.Configuration;

// ...

var modules = ConfigurationManager.GetSection("system.web/httpModules") as 
  HttpModulesSection;

(尽管上述代码需要添加对System.Configuration的引用)。

获得HttpModulesSection的实例后,请使用其Modules属性添加或删除模块。

希望这有帮助。

答案 1 :(得分:0)

我不建议你这样做。您为应用程序用户提供了强大的功能。不应允许它们更改应用程序配置选项。如果这些是面向用户的配置设置,请考虑将它们放在数据库中。您还应该记住,用户帐户应该具有访问文件系统中配置文件的适当权限(这使得它甚至更糟糕)。

无论如何,如果你调整它,也许这段代码片段(更改应用程序设置)会帮助你做到这一点:

Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
myConfiguration.AppSettings.Settings.Item("myKey").Value = ...
myConfiguration.Save();

希望我帮忙!

答案 2 :(得分:0)

 public class CustomSection : ConfigurationSection
 {
   public CustomSecuritySection Security { get; private set; }
                [ConfigurationProperty("type", IsRequired = true, DefaultValue = "QueryStringModule")]
      public String type
       {
         get { return (String)base["type"]; }
         set { base["type"] = value; }
        }

       [ConfigurationProperty("name", IsRequired = true, DefaultValue = "QueryStringModule")]
  public String name
   {
     get { return (String)base["name"]; }
     set { base["name"] = value; }
    }

   public CustomSection()
   {

   }
   }                

        Configuration config = ConfigurationManager.OpenExeConfiguration(@"D:\xxxxx\xxxx\web.config");
        //var httpmod = config.Sections.Add("TestSecton", 

       if (config.Sections["NewSection"] == null)
       {
        customSection = new CustomSection();
        config.Sections.Add("NewSection", customSection );
        config.Save(ConfigurationSaveMode.Full);
        //ConfigurationManager.RefreshSection("NewSection");
        }