.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();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • MVC4制作网站教程第一篇 绪论

    听说Win8和v2012发布,今天心血来潮重装了系统 感觉界面还是不错的. 安装一下vs2012学习一下mvc4,居然没找到Vs2012专业版破解的,干脆下载Express for Web ,算是支持正版吧! 509M很快就下载完,然后安装. 安装完界面,感觉跟vs2010还是有很多不同. 一兄弟说学习最好的方式就是独立完成一个小东东,咱就准备学做个小网站吧,名字想好了大气一点姑且叫做NineskyCMS吧,反正CMS这个名字被用烂,我也跟风一下,希望自己能把她完成. 学习正式开始: 打开VS

  • ASP.NET MVC5网站开发修改及删除文章(十)

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据. 一.删除文章 由于公共模型跟,文章,附件有关联,所以这里的删除次序很重要,如果先删除模型,那么文章ModelID和附件的ModelID多会变成null,所以要先先删除文章和附件再删除公共模型. 由于公共模型和附件是一对多的关系,我们把删除公共模型和删除附件写在一起. 在BLL的BaseRepository类中有默认的De

  • ASP.NET MVC5网站开发之登录、验证和注销管理员篇1(六)

    上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 一.业务逻辑层1.实现256散列加密方法. Ninesky.Core[右键]-> 添加->文件夹,输入文件夹名General. General文件夹[右键]->添加->类,输入类名Security. 引用System.Security.Cryptography命名空间(1),并实现SHA256静态加密方法. 2.Administrator模型类 Ninesky.Core[右键]-

  • ASP.NET MVC5网站开发添加文章(八)

    一.添加文章 1.KindEditor富文本编辑器 到官方网站http://kindeditor.net/down.php下载最新版本,解压后把代码复制到项目的Scripts文件夹下. 2.添加界面的显示. 在ArticleController中添加Add 方法 /// <summary> /// 添加文章 /// </summary> /// <returns>视图页面</returns> public ActionResult Add() { retur

  • ASP.NET MVC5网站开发之用户角色的后台管理1(七)

    角色是网站中都有的一个功能,用来区分用户的类型.划分用户的权限,这次实现角色列表浏览.角色添加.角色修改和角色删除. 一.业务逻辑层 1.角色模型 Ninesky.Core[右键]->添加->类,输入类名Role. 引用System.ComponentModel.DataAnnotations命名空间 using System.ComponentModel.DataAnnotations; namespace Ninesky.Core { /// <summary> /// 角色

  • ASP.NET MVC5网站开发之网站设置(九)

    网站配置一般用来保存网站的一些设置,写在配置文件中比写在数据库中要合适一下,因为配置文件本身带有缓存,随网站启动读入缓存中,速度更快,而保存在数据库中要单独为一条记录创建一个表,结构不够清晰,而且读写也没有配置文件容易实现.这次要做的是网站的基本信息,数据保存在SiteConfig.config. 在14年的时候写过一篇博客<.Net MVC 网站中配置文件的读写> ,在那篇博客中把思路和方法都已经写清楚了,这次的实现思路和上次一样,只是那次自己实现了KeyValueElement类和KeyV

  • ASP.NET MVC5网站开发之业务逻辑层的架构和基本功能 (四)

    业务逻辑层在Ninesky.Core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务. 一.业务逻辑层的架构 Ninesky.Core包含三个命名空间Ninesky.Core.Ninesky.Core.Types.Ninesky.Core.General. Ninesky.Core包含模型和功能实现,Ninesky.Core.Types是项目用到的一些类型的定义,Ninesky.Core.General是项目用到的一些方法的定义. 1.Ninesky.Core命名空间的结构 Ni

  • ASP.NET MVC5网站开发之实现数据存储层功能(三)

    数据存储层在项目Ninesky.DataLibrary中实现,整个项目只有一个类Repository. Repository中实现增删改查询等方法供业务逻辑层调用,主要功能如下图: 具体步骤 一.添加实体框架的引用 1.打开解决方案,选择项目Ninesky.DataLibrary,在引用上右键,选择管理NuGet程序包. 在NuGet包管理器中的浏览标签中点击EntityFramework,点击右侧栏的安装按钮. 在搜索框输入EntityFramework.zh-Hans,安装假体中文资源包.

  • ASP.NET MVC5网站开发文章管理架构(七)

    一.总体说明 先看一下文章管理设想要实现的功能: 再看一下类图 这里Category是栏目:CommonModel是公共模型:Article是文章:Attachment是附件: CommonModel是内容管理这块抽取出来的公共部分,像文章,咨询甚至产品都有一些共同的内容这里把它单独提取出来作为一个类.CommonModel可能包含一片文章,包含一组附件,包含一系列评论,他们之间的关系类图中已经表示出来.  二.搭建架构 这个顺序根以前一样 1.IDAL 在IDAL添加接口InterfaceCo

  • ASP.NET MVC5网站开发用户登录、注销(五)

    一.创建ClaimsIdentity ClaimsIdentity(委托基于声明的标识)是在ASP.NET Identity身份认证系统的登录时要用到,我们在UserService中来生成它. 1.打开IBLL项目InterfaceUserService接口,添加接口方法ClaimsIdentity CreateIdentity(User user, string authenticationType); 2.打开BLL项目的UserService类,添加CreateIdentity方法的实现代

随机推荐