web.config 读写操作

web.config文件是一个XML文件,但是由于权限的原因它在部署中不能像操作普通XML文件那样进行修改,在.net中提供了一个类用于对web.config进行修改。
下面是针对web.config修改通用类的代码:

using System; 
using System.Configuration; 
using System.Web; 
using System.Web.Configuration; 
/// <summary> 
/// ConfigurationOperator 的摘要说明 
/// </summary> 
public class ConfigurationOperator:IDisposable 

    private Configuration config; 
public ConfigurationOperator():this(HttpContext.Current.Request.ApplicationPath) 

         

    public ConfigurationOperator(string path) 
    { 
        config = WebConfigurationManager.OpenWebConfiguration(path); 
    } 
    /// <summary> 
    /// 设置应用程序配置节点,如果已经存在此节点,则会修改该节点的值,否则添加此节点 
    /// </summary> 
    /// <param name="key">节点名称</param> 
    /// <param name="value">节点值</param> 
    public void SetAppSetting(string key, string value) 
    { 
        AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings"); 
        if (appSetting.Settings[key] == null)//如果不存在此节点,则添加 
        { 
            appSetting.Settings.Add(key, value); 
        } 
        else//如果存在此节点,则修改 
        { 
            appSetting.Settings[key].Value = value; 
        } 
    } 
    /// <summary> 
    /// 设置数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值,存在则修改 
    /// </summary> 
    /// <param name="key">节点名称</param> 
    /// <param name="value">节点值</param> 
    public void SetConnectionString(string key, string connectionString) 
    { 
        ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
        if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加 
        { 
            ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString); 
            connectionSetting.ConnectionStrings.Add(connectionStringSettings); 
        } 
        else//如果存在此节点,则修改 
        { 
            connectionSetting.ConnectionStrings[key].ConnectionString = connectionString; 
        } 
    } 
    /// <summary> 
    /// 保存所作的修改 
    /// </summary> 
    public void Save() 
    { 
        config.Save(); 
        config = null; 
    } 
    public void Dispose() 
    { 
        if (config != null) 
        { 
            config.Save(); 
        } 
    } 

把上面的代码存放到App_Code文件夹下,我们在项目中就可以直接使用了。
我们通过一个例子演示如果使用这个通用类对web.config进行设置。新建一个aspx页面,下面是前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfigModifyDemo.aspx.cs" Inherits="ConfigModifyDemo" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>在部署后修改web.config的例子</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <table border="0" cellpadding="0" cellspacing="0"> 
    <tr><td>类型</td><td>名称</td><td>值</td></tr> 
    <tr><td> 
        程序配置</td><td> 
            <asp:TextBox ID="txtKey" runat="server"></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtKey" 
                ErrorMessage="*" Display="Dynamic"></asp:RequiredFieldValidator></td><td> 
        <asp:TextBox ID="txtAppSetting" runat="server"></asp:TextBox></td></tr> 
    <tr><td> 
        数据库连接</td><td> 
            <asp:TextBox ID="txtConnectionName" runat="server"></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="*" ControlToValidate="txtConnectionName" Display="Dynamic"></asp:RequiredFieldValidator></td><td style="height: 24px"> 
        <asp:TextBox ID="txtConnectionString" runat="server"></asp:TextBox></td></tr> 
    <tr><td> 
        <asp:Button ID="btnModify" runat="server" OnClick="btnModify_Click" Text="修改" /></td><td></td><td></td></tr> 
    </table> 
    </div> 
    </form> 
</body> 
</html>

编写后台代码有时可能需要增加对配置文件读写操作类所在dll的引用,如下:

下面是后台代码:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Web.Configuration;//注意添加这个命名空间 
public partial class ConfigModifyDemo : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    protected void btnModify_Click(object sender, EventArgs e) 
    { 
        string appSetting = txtAppSetting.Text;//appSetting子节点值 
        string connectionString = txtConnectionString.Text;//连接字符串 
        string key = txtKey.Text;//appSetting子节点Key 
        string connectionName = txtConnectionName.Text;//连接Name 
        ConfigurationOperator op = new ConfigurationOperator(); 
        op.SetAppSetting(key, appSetting); 
        op.SetConnectionString(connectionName, connectionString); 
        op.Save(); 
    } 
     

下面是运行界面:

我们在上面的表单中填入如下信息:

假设此时web.config文件相关节点的内容如下:

<appSettings> 
</appSettings> 
<connectionStrings> 
    <add name="Conn" connectionString="Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa" /> 
</connectionStrings> 
我们点击“修改”按钮之后的文件内容如下:

<appSettings> 
    <add key="country" value="china" /> 
</appSettings> 
<connectionStrings> 
    <add name="Conn" connectionString="Data Source=(local);Initial Catalog=Study;User ID=sa;Password=sa" 
      providerName="System.Data.SqlClient" /> 
</connectionStrings> 
从执行结果可以看出我们的程序确实能做到修改和添加web.config中的节点的功能。需要注意的是,在利用了某些版本控制软件之后(如Microsoft Visual SourceSafe),版本控制软件可能会将web.config设置为只读属性,就会出现不能设置的情况,我们需要手动将web.config的只读属性去掉才能设置web.config文件。在实际部署项目的时候就不会存在这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值