Web.config的读取

对于Web.config的读取大家都很属性了。平时我们用得比较多的就是appSettings节点下配置。如:

我们对应的代码是:

= ConfigurationManager.AppSettings[“OAuth_QQ_ClientId”];
= ConfigurationManager.AppSettings[“OAuth_QQ_CallbackUrl”];
= ConfigurationManager.AppSettings[“OAuth_QQ_ClientScrert”];
= ConfigurationManager.AppSettings[“OAuth_Sina_ClientId”];
= ConfigurationManager.AppSettings[“OAuth_Sina_ClientScrert”];
= ConfigurationManager.AppSettings[“OAuth_Sina_CallbackUrl”];
........

是的,很简单、很方便、很清晰。可以总感觉缺少那么一点“面向对象”的感觉。少还无所谓,如果几十个上百个呢?我们是不是可以考虑分类定义,如下:

 <!--自定义配置-->
<customCon>
<!--邮件配置-->
<mail mailPwd="" mailHost="" mailFrom="" />
<!--QQ登陆-->
<oAuthQQ OAuth_QQ_ClientId="" OAuth_QQ_ClientScrert="" OAuth_QQ_CallbackUrl="haojima.net/hi_login.html" />
<!--新浪登录-->
<oAuthSina OAuth_Sina_ClientId="" OAuth_Sina_ClientScrert="" OAuth_Sina_CallbackUrl="haojima.net/hi_login.html" />
</customCon>

可是,你会发现 customCon 编辑器不认,因为这是我自己定义的一个,那如何是好?如下:(申明自定义标签)

如此,是不是感觉分类更清楚了?可是问题又来了,那我们怎么读取自定义标签里面的值呢?

首先:(注意:需要继承ConfigurationSection)

/// <summary>
/// 自定义配置
/// </summary>
public class CustomCon : ConfigurationSection
{
/// <summary>
/// 邮箱设置
/// </summary>
[ConfigurationProperty("mail", IsRequired = true)]
public MailElement Mail
{
get { return (MailElement)this["mail"]; }
} /// <summary>
/// qq登录
/// </summary>
[ConfigurationProperty("oAuthQQ", IsRequired = true)]
public OAuthQQElement OAuthQQ
{
get { return (OAuthQQElement)this["oAuthQQ"]; }
} /// <summary>
/// 新浪登录
/// </summary>
[ConfigurationProperty("oAuthSina", IsRequired = true)]
public OAuthSinaElement OAuthSina
{
get { return (OAuthSinaElement)this["oAuthSina"]; }
}

然后MailElement、OAuthQQElement、OAuthSinaElement 分别具体定义:

 #region MailElement(邮箱)
public class MailElement : ConfigurationElement
{
/// <summary>
/// 发件人密码
/// </summary>
[ConfigurationProperty("mailPwd", IsRequired = true)]
public string Pwd
{
get { return this["mailPwd"].ToString(); }
set { this["mailPwd"] = value; }
} /// <summary>
/// SMTP邮件服务器
/// </summary>
[ConfigurationProperty("mailHost", IsRequired = true)]
public string Host
{
get { return this["mailHost"].ToString(); }
set { this["mailHost"] = value; }
} /// <summary>
///发件人邮箱
/// </summary>
[ConfigurationProperty("mailFrom", IsRequired = true)]
public string From
{
get { return this["mailFrom"].ToString(); }
set { this["mailFrom"] = value; }
}
}
#endregion #region OAuthQQElement(QQ)
public class OAuthQQElement : ConfigurationElement
{ [ConfigurationProperty("OAuth_QQ_ClientId", IsRequired = true)]
public string ClientId
{
get { return this["OAuth_QQ_ClientId"].ToString(); }
set { this["OAuth_QQ_ClientId"] = value; }
} [ConfigurationProperty("OAuth_QQ_ClientScrert", IsRequired = true)]
public string ClientScrert
{
get { return this["OAuth_QQ_ClientScrert"].ToString(); }
set { this["OAuth_QQ_ClientScrert"] = value; }
} [ConfigurationProperty("OAuth_QQ_CallbackUrl", IsRequired = true)]
public string CallbackUrl
{
get { return this["OAuth_QQ_CallbackUrl"].ToString(); }
set { this["OAuth_QQ_CallbackUrl"] = value; }
}
}
#endregion #region OAuthSinaElement(新浪)
public class OAuthSinaElement : ConfigurationElement
{ [ConfigurationProperty("OAuth_Sina_ClientId", IsRequired = true)]
public string ClientId
{
get { return this["OAuth_Sina_ClientId"].ToString(); }
set { this["OAuth_Sina_ClientId"] = value; }
} [ConfigurationProperty("OAuth_Sina_ClientScrert", IsRequired = true)]
public string ClientScrert
{
get { return this["OAuth_Sina_ClientScrert"].ToString(); }
set { this["OAuth_Sina_ClientScrert"] = value; }
} [ConfigurationProperty("OAuth_Sina_CallbackUrl", IsRequired = true)]
public string CallbackUrl
{
get { return this["OAuth_Sina_CallbackUrl"].ToString(); }
set { this["OAuth_Sina_CallbackUrl"] = value; }
}
}
#endregion

到现在为止,我们在代码层面已经建立和config一一对应的关联了。下面我们来取值:

 CustomCon custom = (CustomCon)ConfigurationManager.GetSection("customCon");
var url = custom.OAuthQQ.CallbackUrl;//获取值
var id = custom.OAuthQQ.ClientId;//获取值
//、、、、、

如此是不是甚爽,比原先的 appSettings 更有“对象”的感觉了吧。且,当你配置过多的时候分类也更加清晰!

Web.config的写入

对于Web.config的写入需求一般很少,多数都只是读取。那为什么我这里要说写入呢?因为好多人问我“这个博客系统的数据库在哪里?”,每次都解释的'不亦乐乎',"这个是coder first根据代码生成数据库",后来次数多了实在受不了了。考虑着,是否可以做个引导页面,初次使用的时候提示设置数据库和邮箱什么的(这样的话对于没有编程基础的人搭建自己的博客系统也降低了门槛)。

第一次启动程序的时候检查数据库连接,没有就进入引导页面,设置。(这个过程都不用去编辑Web.config文件了)

好了,看了上面的效果图我们继续来看是怎么把数据写入到Web.config文件的吧。

其实很简单,稍微改下上面代码:

改成通过 WebConfigurationManager.OpenWebConfiguration 来读取代码就可以编辑了。不过不要忘了 config.Save(); 才会真正更新到Web.config里面去。

到这里还只能修改我们自定义的节点数据。我们最最主要的是想更新数据库连接,请看下面对数据库连接的操作:

/// <summary>
/// 修改数据库连接
/// </summary>
/// <param name="key"></param>
/// <param name="connectionString"></param>
/// <param name="providerName"></param>
public static void SetConnectionString(string key, string connectionString, string providerName = "System.Data.SqlClient")
{
ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加
{
ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString, providerName);
connectionSetting.ConnectionStrings.Add(connectionStringSettings);
}
else//如果存在此节点,则修改
{
connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
connectionSetting.ConnectionStrings[key].ProviderName = providerName;
}
config.Save();
}

其实,细看和我们上面的代码大同小异。(只是把我们自定义的类改成了 ConnectionStringsSection .net默认的连接对象)

一步步搭建自己的博客

好了,以上都是胡说八道。

主要是说下思路,大家自由发挥。感谢您的阅读,希望对您有一点点作用!

文章首链:http://www.cnblogs.com/zhaopei/p/5677053.html

一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)的更多相关文章

  1. 一步步开发自己的博客 .NET版(1、基本显示)

    前言 我们每个猿都有一个搭建自己独立博客的梦,我也不例外.以前想 现在想 以后也想.之所以一直迟迟没有着手,是因为难以跨出第一步.每次心里想着,等我以后技术好了再说,然后就没有然后了.以前用过word ...

  2. 一步步开发自己的博客 .NET版(3、注册登录功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  3. 一步步开发自己的博客 .NET版(4、文章发布功能)百度编辑器

    前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做个插件,任何网站上的技术 ...

  4. 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  5. 一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  6. 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...

  7. 一步步开发自己的博客 .NET版(9、从model first替换成code first 问题记录)

    为什么要改用code first 用过code first的基本上都不会再想用回model first或是db first(谁用谁知道).不要问我为什么不一开始就直接使用code first,因为那个 ...

  8. ASP.NET 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    原文:http://www.cnblogs.com/zhaopei/p/5677053.html

  9. 一步步搭建自己的博客 .NET版(2、评论功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

随机推荐

  1. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  2. 使用 Roslyn 编译器服务

    .NET Core和 .NET 4.6中 的C# 6/7 中的编译器Roslyn 一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为 ...

  3. Emoji选项列表

    一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...

  4. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  5. $ORACLE_HOME变量值末尾多“/”惹的祸

    之前一直误以为$ORACLE_HOME变量的路径中末尾多写一个"/"不会有影响. 今天做实验时碰到一个情景,发现并不是这样. 环境:OEL 5.7 + Oracle 10.2.0. ...

  6. Javacript实现字典结构

    字典是一种用[键,值]形式存储元素的数据结构.也称作映射,ECMAScript6中,原生用Map实现了字典结构. 下面代码是尝试用JS的Object对象来模拟实现一个字典结构. <script& ...

  7. HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置

    在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...

  8. 太多选择——企业如何选择合适的BI工具?

    在没认清现状前,企业当然不能一言不合就上BI. BI不同于一般的企业管理软件,不能简单归类为类似用于提高管理的ERP和WMS,或用于提高企业效率的OA.BPM.BI的本质应该是通过展现数据,用于加强企 ...

  9. 设置Hyper-V和VMware多个服务之间共存

    这个方法是解决多个服务之间不能共存,下面相当于是以Hyper-V和VMware做例子,其他的也适用. 今天准备安装VMware Workstation 10,然后玩玩MAC OS. 没想到,淡定的我双 ...

  10. Mysql 忘记root密码处理办法

    一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-t ...