zoukankan      html  css  js  c++  java
  • .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的臃肿,可以采用把配置节定义在这里,把具体配置信息保存在其他文件中。

    以上传配置信息为例,看一下理想的结构

    image

    ConfigUpload.config的内容

    image

    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()一下,内容就会保存到ConfigUpload.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();
  • 相关阅读:
    js设计模式 -- 拷贝模式
    超简单的SpringBoot整合mybatis
    使用JS调用手机本地摄像头或者相册图片识别二维码/条形码
    SpringBootsad整合EhCache做缓存处理
    调用微信的扫一扫功能详解说明---(java 排坑版)
    获取系统文件的创建日期
    在windows上获取文件创建时间
    简单计算器
    lambda-基于谓词筛选值序列
    IEnumerable<T>和IQueryable<T>区别
  • 原文地址:https://www.cnblogs.com/mzwhj/p/3589887.html
Copyright © 2011-2022 走看看