保存更改到web.使用System.Configuration.ConfigurationSection配置

本文关键字:Configuration ConfigurationSection 配置 System 使用 web 保存更改 | 更新日期: 2023-09-27 18:08:34

我已经创建了一个自定义的web配置部分,我可以在运行时成功地阅读和修改。但是,它不会在物理上改变web.config。如果网站重新启动或池被回收,我失去了我的变化,它恢复到原来的网页。配置设置。

我希望能够持久的变化到网络。

我的网页。配置部分如下所示:

<configSections>
    <section
        name="MyCustomConfig"
        type="MyProject.Configuration.myCustomConfig"
        allowLocation="true"
        allowDefinition="Everywhere"
        /> 
</configSections>
<MyCustomConfig Address="127.0.0.1" 
        OrgId="myorg" 
        User="john"/>

这是我的配置类

namespace MyProject.Configuration
{
    public class MyCustomConfig : System.Configuration.ConfigurationSection
    {
        // Static accessor
        public static MyCustomConfig Current =
            (MyCustomConfig)WebConfigurationManager.GetSection("MyCustomConfig");
        public void Save()
        {
            if (IsModified())
            {
                // I'm getting here, but can't figure out how to save
            }
        }
        public override bool IsReadOnly()
        {
            return false;
        }
        [ConfigurationProperty("OrgId", DefaultValue = "test", IsRequired = true)]
        public string OrgId
        {
            get { return this["OrgId"].ToString(); }
            set { 
                this["OrgId"] = value; 
            }
        }
        [ConfigurationProperty("Address", DefaultValue="127.0.0.1", IsRequired=true)]
        public string Address {
            get { return this["Address"].ToString();  }
            set { this["Address"] = value; }
        }
        [ConfigurationProperty("User", DefaultValue = "", IsRequired = true)]
        public string User
        {
            get {
                if (this["User"] == null) return string.Empty;
                else return this["User"].ToString(); 
            }
            set { this["User"] = value; }
        }
    }
}

在我的控制器中,我用张贴表单

修改设置
[HttpPost]
public ActionResult Edit(ConfigurationViewModel config)
{
    if (ModelState.IsValid)
    {
        // write changes to web.config
        Configuration.MyCustomConfig.Current.Address = config.SIPAddress;
        Configuration.MyCustomConfig.Current.User = config.User;
        Configuration.MyCustomConfig.Current.OrgId = config.OrgId;
        Configuration.MyCustomConfig.Save()
    }
}

在配置类保存方法中,IsModified()返回true,现在我只需要将这些修改保存到文件中

保存更改到web.使用System.Configuration.ConfigurationSection配置

为什么要在运行时更改配置文件?这将在每次对文件进行更改时导致应用程序池回收。

将这些设置存储在数据库中并在应用程序启动时从数据库恢复它们是否有意义?

我只是从最佳实践的角度提出质疑,因为我知道这是可能的,只是不推荐。