当前位置: 移动技术网 > IT编程>开发语言>.net > .Net MVC网站中配置文件的读写

.Net MVC网站中配置文件的读写

2017年12月12日  | 移动技术网IT编程  | 我要评论
网站中有很多需要设置的内容,像网站信息,注册设置,上传设置等。如果保存在数据库中需要单独建张表,表中只有一条记录,这样会让数据库很臃肿,而且频繁存取数据库的效率也是个问题。

网站中有很多需要设置的内容,像网站信息,注册设置,上传设置等。如果保存在数据库中需要单独建张表,表中只有一条记录,这样会让数据库很臃肿,而且频繁存取数据库的效率也是个问题。而保存在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();

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网