我开发了一个使用httpmodules的自定义模块,当我的模块安装时,需要将其添加到web.config中,并在卸载我的模块时将其从中删除。到目前为止我一直在做的是修改我的web.config文件,在安装模块后立即手动添加必要的部分,并在卸载模块之前将其删除。该部分如下所示:
<httpModules>
<add type="QueryStringModule" name="QueryStringModule"/>
</httpModules>
现在我想知道是否可以自动执行此任务,即以编程方式修改web.config。我用谷歌搜索,但他们不适合我。这个问题在asp.net中是否有任何方法。谢谢。
答案 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");
}