.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

Config\Upload.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()一下,內容就會保存到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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM