.Net MVC网站中配置文件的读写
网站中有很多需要设置的内容,像网站信息,注册设置,上传设置等。如果保存在数据库中需要单独建张表,表中只有一条记录,这样会让数据库很臃肿,而且频繁存取数据库的效率也是个问题。而保存在config文件里是个不错选择,而且带有缓存功能!
我们可以在web.config的配置节写入配置。
<configuration> <configsections> <section name="entityframework" type="system.data.entity.internal.configfile.entityframeworksection, entityframework, version=6.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089" requirepermission="false" /> <!--这里可以定义配置节 --> <!-- for more information on entity framework configuration, visit http://go.microsoft.com/fwlink/?linkid=237468 --> </configsections>
但是把大量的配置都写入这里也会造成web.config的臃肿,可以采用把配置节定义在这里,把具体配置信息保存在其他文件中。
以上传配置信息为例,看一下理想的结构
config\upload.config的内容
1、配置的元素。采用<add />的形式,是一个键和值得表示形式。<add key="maxsize" value="1500000" />。
2、元素的集合,里面定义一系列的元素。<uploadconfig>……</uploadconfig>
3、自定义节,表示自定义的一个节点。<section name="uploadconfig" type="ninesky.models.config.uploadconfig, ninesky.models"/>
name:节点名,type:处理节点的类行,逗号前是类名,逗号后是缩在程序集。
我们要创建这个类来管理配置
一、创建键,值元素类。
里面只有两个读写属性key和value,内容非常简单
using system.configuration; namespace ninesky.models.config { /// <summary> /// 键值元素类 /// <remarks> /// 创建:2014.03.09 /// </remarks> /// </summary> public class keyvalueelement:configurationelement { /// <summary> /// 键 /// </summary> [configurationproperty("key",isrequired=true)] public string key { get { return this["key"].tostring(); } set { this["key"] = value; } } /// <summary> /// 值 /// </summary> [configurationproperty("value")] public string value { get { return this["value"].tostring(); } set { this["value"] = value; } } } }
二、创建元素集合类。内容很简单都进行了注释
using system; using system.configuration; namespace ninesky.models.config { /// <summary> /// 元素集合类 /// <remarks> /// 创建:2014.03.09 /// </remarks> /// </summary> [configurationcollection(typeof(keyvalueelement))] public class keyvalueelementcollection:configurationelementcollection { //忽略大小写 public keyvalueelementcollection() : base(stringcomparer.ordinalignorecase) { } /// <summary> /// 集合中指定键的元素 /// </summary> /// <param name="name"></param> /// <returns></returns> new public keyvalueelement this[string name] { get { return (keyvalueelement)base.baseget(name); } set { if (base.properties.contains(name)) base[name] = value; else base.baseadd(value); } } /// <summary> /// 创建新元素. /// 必须重写 /// </summary> /// <returns></returns> protected override configurationelement createnewelement() { return new keyvalueelement(); } /// <summary> /// 获取元素的键 /// </summary> /// <param name="element"></param> /// <returns></returns> protected override object getelementkey(configurationelement element) { return ((keyvalueelement)element).key; } } }
三、配置节类
类中定义私有属性keyvalues。进行读写配置节集合,然后定义一系列的需要的配置属性,操作就是对keyvalues的元素读写。
using system.configuration; namespace ninesky.models.config { /// <summary> /// 上传设置配置节 /// <remarks> /// 创建:2014.03.09 /// </remarks> /// </summary> public class uploadconfig:configurationsection { private static configurationproperty _property = new configurationproperty(string.empty, typeof(keyvalueelementcollection), null, configurationpropertyoptions.isdefaultcollection); /// <summary> /// 配置列表 /// </summary> [configurationproperty("", options = configurationpropertyoptions.isdefaultcollection)] private keyvalueelementcollection keyvalues { get { return (keyvalueelementcollection)base[_property]; } set { base[_property] = value; } } /// <summary> /// 最大大小 /// </summary> public int maxsize { get { int _value =0; if (keyvalues["maxsize"] != null) int.tryparse(keyvalues["maxsize"].value, out _value); return _value; } set { if (keyvalues["maxsize"] == null) keyvalues["maxsize"] = new keyvalueelement() { key = "maxsize", value = value.tostring() }; else keyvalues["maxsize"].value = value.tostring(); } } /// <summary> /// 上传目录 /// 为应用程序目录起的文件夹名,前面不带~/ /// </summary> public string path { get { if (keyvalues["path"] == null) return "upload"; return keyvalues["path"].value; } set { if (keyvalues["path"] == null) keyvalues["path"] = new keyvalueelement() { key = "path", value = value }; else keyvalues["path"].value = value; } } /// <summary> /// 允许上传的图片类型文件扩展,多个用“,”隔开 /// </summary> public string imageext { get { if (keyvalues["imageext"] == null) return string.empty; return keyvalues["imageext"].value; } set { if (keyvalues["imageext"] == null) keyvalues["imageext"] = new keyvalueelement() { key = "imageext", value = value }; else keyvalues["imageext"].value = value; } } /// <summary> /// 允许上传的flash类型文件扩展,多个用“,”隔开 /// </summary> public string flashext { get { if (keyvalues["flashext"] == null) return string.empty; return keyvalues["flashext"].value; } set { if (keyvalues["flashext"] == null) keyvalues["flashext"] = new keyvalueelement() { key = "flashext", value = value }; else keyvalues["flashext"].value = value; } } /// <summary> /// 允许上传的媒体类型文件扩展,多个用“,”隔开 /// </summary> public string mediaext { get { if (keyvalues["mediaext"] == null) return string.empty; return keyvalues["mediaext"].value; } set { if (keyvalues["mediaext"] == null) keyvalues["mediaext"] = new keyvalueelement() { key = "mediaext", value = value }; else keyvalues["mediaext"].value = value; } } /// <summary> /// 允许上传的文件类型文件扩展,多个用“,”隔开 /// </summary> public string fileext { get { if (keyvalues["fileext"] == null) return string.empty; return keyvalues["fileext"].value; } set { if (keyvalues["fileext"] == null) keyvalues["fileext"] = new keyvalueelement() { key = "fileext", value = value }; else keyvalues["fileext"].value = value; } } } }
四、读取配置
也是最关系的,配置信息怎么读出来。在上面类写好后读取非常容易了,只需用webconfigurationmanager.openwebconfiguration("~"). getsection()获取配置节的实例,局可以使用属性值了
var _uploadconfig = system.web.configuration.webconfigurationmanager.openwebconfiguration("~").getsection("uploadconfig") as ninesky.models.config.uploadconfig; //文件最大限制 int _maxsize = _uploadconfig.maxsize; //文件路径 string _fileparth = _uploadconfig.path ; string _dirname; //允许上传的类型 hashtable exttable = new hashtable(); exttable.add("image", _uploadconfig.imageext); exttable.add("flash", _uploadconfig.fileext); exttable.add("media", _uploadconfig.mediaext); exttable.add("file", _uploadconfig.fileext);
五、写入配置
跟读取类似,把属性值设置后save()一下,内容就会保存到config\upload.config中。
代码如下:
var _uploadconfig = system.web.configuration.webconfigurationmanager.openwebconfiguration("~").getsection("uploadconfig") as ninesky.models.config.uploadconfig; //文件最大限制 int _maxsize = _uploadconfig.maxsize; _uploadconfig.fileext = "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2"; _uploadconfig.flashext = "swf,flv"; _uploadconfig.imageext = "gif,jpg,jpeg,png,bmp"; _uploadconfig.mediaext = "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb"; _uploadconfig.path = "upload"; _uploadconfig.currentconfiguration.save();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Python 列表及其应用