Asp.Net webconfig中使用configSections的用法
最近闲来无事,研究研究公司的框架,无意中打开了webconfig页面,发现了一个我不认识的节点<configSections></configSections>,于是百度之,大致的了解了它的作用,还是蛮重要的!!!但是我居然不知道!!!这是最骚的,瞬间觉得自己还是太年轻了!!!好了,不BB了,言归正传了。
1、configSections有什么用
大家都知道,webconfig文件中不能随意的添加节点,稍有不慎,浏览器就GG了,报错了,玩完了,整个人都不好了,(当然仅限于配置文件,你如果在外部XML文件了定义节点,然后生成对象,那就是你想怎么定义就怎么定义)。
所以configSections节点就是干这个事的,让你在webconfig中定义自想要定义的节点,当然肯定是要按照它指定的规则来!!!下面就来说configSection制定的规则。
2、为什么需要自定义节点
说完configSections作用(帮助我们按照它的规则创建一系列自定义节点),接下来说所为什么需要自定义节点?
为了增加应用程序的可移植性,通常网站需要配置一些自定义的节点,例如:文件上传的路径等,再深入的应用,可以定义工厂方法需要创建的类。
3、configSections的使用方法
<configSections>
<sectionGroup name="WebSiteConfig">
<section name="dbProviders" type="ZC.DBUtility.WebSiteInfoHandler,ZC.DBUtility"/>
<section name="fileUploadPath" type="ZC.DBUtility.WebSiteInfoHandler,ZC.DBUtility"/>
</sectionGroup>
</configSections>
(1)、定义一个configSection配置节
(2)、然后定义sectionGroup节点,这个配置节相当于所有section配置节的命名空间。
(3)、最后定义section配置节,通过这个配置节设置自定义节点的名称和处理configSection的一般处理程序 注意:这个处理程序必须继承IConfigurationSectionHandler不要问我为什么,你知道为什么!!!
下面开始设置自定义节点
<WebSiteConfig>
<dbProviders>
<add key="DBInstance" value="ConnString" type="sqlserver"/>
</dbProviders>
<fileUploadPath>
<add key="path" value="#" />
<add key="path1" value="#1" />
</fileUploadPath>
</WebSiteConfig>
自定义节点的定义规则要和上面的configSections的定义规则保持一致
最后编写一般处理程序,按照一定的规则获取我们的自定义节点的信息
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Xml; namespace ZC.DBUtility
{
public class WebSiteInfoHandler : IConfigurationSectionHandler
{
/// <summary>
/// 返回自定义节点对象字典
/// </summary>
/// <param name="parent">父对象</param>
/// <param name="configContext">配置上下文对象</param>
/// <param name="section">节 XML 节点</param>
/// <returns> 创建的节处理程序对象。</returns>
public object Create(object parent, object configContext, System.Xml.XmlNode section)
{
Dictionary<string, ConfigEntity> config = new Dictionary<string, ConfigEntity>();
foreach (XmlNode node in section) {
string key = string.Empty, value = string.Empty, type = string.Empty;
if (node.Attributes["key"] != null)
key = node.Attributes["key"].Value;
if(node.Attributes["value"] != null)
value = node.Attributes["value"].Value;
if (node.Attributes["type"] != null)
type = node.Attributes["type"].Value;
config.Add(key, new ConfigEntity(value, type));
}
return config;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ZC.DBUtility
{
public class ConfigEntity
{
/// <summary>
/// 自定义节点对象
/// </summary>
/// <param name="_value">节点的value值</param>
/// <param name="_type">节点的type值</param>
public ConfigEntity(string _value, string _type)
{
this.Value = _value;
this.Type = _type;
} public string _value;
public string _type;
public string Value {
get { return _value; }
set { _value = value; }
}
public string Type {
get { return _type; }
set { _type = value; }
}
}
}
ok,做完这几步我们可以开始愉快的使用自定义节点的信息了
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ZC.DBUtility; namespace Web.Ado
{
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<string, ConfigEntity> config = ConfigurationSettings.GetConfig("WebSiteConfig/dbProviders") as Dictionary<string, ConfigEntity>;
if (config != null) {
foreach (string key in config.Keys) {
ConfigEntity ce = config[key] as ConfigEntity;
Response.Write(ce.RetrieveFullName());
}
}
}
}
}
ok,done
Asp.Net webconfig中使用configSections的用法的更多相关文章
- ASP.NET Core中Middleware的使用
https://www.cnblogs.com/shenba/p/6361311.html ASP.NET 5中Middleware的基本用法 在ASP.NET 5里面引入了OWIN的概念,大致意 ...
- Asp.Net MVC中DropDownListFor的用法(转)
2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T List<T>的第一个 ...
- Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- 转:Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- ASP.NET MVC中Area的另一种用法
ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ...
- ASP.NET中application对象的用法(面试题)
ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Appli ...
- Asp.Net Core中服务的生命周期选项区别和用法
在做一个小的Demo中,在一个界面上两次调用视图组件,并且在视图组件中都调用了数据库查询,结果发现,一直报错,将两个视图组件的调用分离,单独进行,却又是正常的,寻找一番,发现是配置依赖注入服务时,对于 ...
- 运行ABP(asp.net core 3.X+Vue)提示'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。
创建ASP.NET Boilerplate,还原数据库和启动客户端 这里就略过,具体参考 ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) ASP.NET Boilerpl ...
- asp.net中Repeater控件用法笔记
大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用 repeater作为我们的数据绑定控件了.Repeater控件与DataGrid (以及DataList)控件的主要区 ...
随机推荐
- C# 自带的.net类库 实现得到本机IP以及网关地址
今天需要用到一个功能,获取主机名和本机的IP 准备用API实现的,然后稍微查了一下,发现.net类库已经有了 就在System.Net命名空间中的DNS类中 GetHostName 获取本地计算机的主 ...
- Java 理论与实践: 修复 Java 内存模型,第 2 部分(转载)
在 JSR 133 中 JMM 会有什么改变? 活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.在本系列文章的 ...
- windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题
可能是显卡驱动程序版本太高了,退回到以前的版本就ok了. 第一次遇见这个问题可把我给整疯了!! 后来又遇到一次,参考之前的解决方法,很快就搞定了!! 可见,经验可是很重要的一个东西啊.
- Java算法 -- 顺序表
顺序表结构定义:就是按照顺序存储方式存储的线性表 1.定义一个顺序表的基本数据: static final int MAXLEN = 100; Class Student{ private Strin ...
- 记一次 Confluence 被攻击事件
故事开始 4 月 14 日,星期天,天气不好,呆在家玩 LOL,正 Happy 的时候同事打电话给我,说 Confluence 看文档的时候挂了,报错:502. 一寻思,不就挂了吗,小意思,重启呗,于 ...
- 清北学堂2019NOIP提高储备营DAY3
今天是钟神讲课,讲台上照旧摆满了冰红茶 目录时间到: $1. 动态规划 $2. 数位dp $3. 树形dp $4. 区间dp $5. 状压dp $6. 其它dp $1. 动态规划: ·以斐波那契数列为 ...
- iOS应用开发权限请求处理
1.写在前面 APP开发避免不开系统权限的问题,如何在APP以更加友好的方式向用户展示系统权限,似乎也是开发过程中值得深思的一件事: 那如何提高APP获取iOS系统权限的通过率呢?有以下几种方式: 1 ...
- 配合前端开发,调试前端页面bug
同事开发的H5页面 在iOS10.1的手机上会有bug 先下载ios10.1的模拟器,安装到xcode上,注意给电脑腾出足够的空间 https://stackoverflow.com/questio ...
- [agc007f] Shik and Copying String 模拟神题
Description "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...
- linux的档案权限和目录配置
Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others /etc/passwd 账号信息 /etc/shadow 个人密码 /etc/group 组名记录 ...