.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();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
- 这篇文章主要介绍了.NET Core下使用Kafka的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
- 在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
- 这篇文章主要介绍了Win10 IIS 安装及.net 4.5及Win10安装IIS并配置ASP.NET 4.0的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
- 这篇文章主要介绍了详解.NET Core 3.0 里新的JSON API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
- 这篇文章主要介绍了.net数据库操作框架SqlSugar的简单入门,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下...2021-09-22
ASP.NET Core根据环境变量支持多个 appsettings.json配置文件
这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22- 这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
- 这篇文章主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-15
C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?
这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下...2020-06-25- ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。这篇文章主要给大家介绍了.NET C#利用ZXing生成、识别二维码/条形码的方法,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴。...2020-06-25
详解ASP.NET Core 中基于工厂的中间件激活的实现方法
这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22- 这篇文章主要介绍了C#使用Ado.Net更新和添加数据到Excel表格的方法,较为详细的分析了OLEDB的原理与使用技巧,可实现较为方便的操作Excel数据,需要的朋友可以参考下...2020-06-25
使用Maven 搭建 Spring MVC 本地部署Tomcat的详细教程
这篇文章主要介绍了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-16asp.net通过消息队列处理高并发请求(以抢小米手机为例)
这篇文章主要介绍了asp.net通过消息队列处理高并发请求(以抢小米手机为例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22ASP.NET单选按钮控件RadioButton常用属性和方法介绍
RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个...2021-09-22ASP.NET 2.0中的数据操作:使用两个DropDownList过滤的主/从报表
在前面的指南中我们研究了如何显示一个简单的主/从报表, 该报表使用DropDownList和GridView控件, DropDownList填充类别,GridView显示选定类别的产品. 这类报表用于显示具有...2016-05-19- 这篇文章主要介绍了SpringMvc自动装箱及GET请求参数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 这篇文章主要介绍了SpringMvc获取请求头请求体消息过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-17
详解.NET Core 使用HttpClient SSL请求出错的解决办法
这篇文章主要介绍了.NET Core 使用HttpClient SSL请求出错的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-09-22