.Net MVC網(wǎng)站中配置文件的讀寫
網(wǎng)站中有很多需要設(shè)置的內(nèi)容,像網(wǎng)站信息,注冊(cè)設(shè)置,上傳設(shè)置等。如果保存在數(shù)據(jù)庫(kù)中需要單獨(dú)建張表,表中只有一條記錄,這樣會(huì)讓數(shù)據(jù)庫(kù)很臃腫,而且頻繁存取數(shù)據(jù)庫(kù)的效率也是個(gè)問題。而保存在config文件里是個(gè)不錯(cuò)選擇,而且?guī)в芯彺婀δ埽?nbsp;
我們可以在web.config的配置節(jié)寫入配置。
<configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!--這里可以定義配置節(jié) --> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections>
但是把大量的配置都寫入這里也會(huì)造成web.config的臃腫,可以采用把配置節(jié)定義在這里,把具體配置信息保存在其他文件中。
以上傳配置信息為例,看一下理想的結(jié)構(gòu)

Config\Upload.config的內(nèi)容

1、配置的元素。采用<add />的形式,是一個(gè)鍵和值得表示形式。<add key="MaxSize" value="1500000" />。
2、元素的集合,里面定義一系列的元素。<UploadConfig>……</UploadConfig>
3、自定義節(jié),表示自定義的一個(gè)節(jié)點(diǎn)。<section name="UploadConfig" type="Ninesky.Models.Config.UploadConfig, Ninesky.Models"/>
name:節(jié)點(diǎn)名,type:處理節(jié)點(diǎn)的類行,逗號(hào)前是類名,逗號(hào)后是縮在程序集。
我們要?jiǎng)?chuàng)建這個(gè)類來管理配置
一、創(chuàng)建鍵,值元素類。
里面只有兩個(gè)讀寫屬性key和value,內(nèi)容非常簡(jiǎn)單
using System.Configuration;
namespace Ninesky.Models.Config
{
/// <summary>
/// 鍵值元素類
/// <remarks>
/// 創(chuàng)建: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; }
}
}
}
二、創(chuàng)建元素集合類。內(nèi)容很簡(jiǎn)單都進(jìn)行了注釋
using System;
using System.Configuration;
namespace Ninesky.Models.Config
{
/// <summary>
/// 元素集合類
/// <remarks>
/// 創(chuàng)建: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>
/// 創(chuàng)建新元素.
/// 必須重寫
/// </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;
}
}
}
三、配置節(jié)類
類中定義私有屬性KeyValues。進(jìn)行讀寫配置節(jié)集合,然后定義一系列的需要的配置屬性,操作就是對(duì)KeyValues的元素讀寫。
using System.Configuration;
namespace Ninesky.Models.Config
{
/// <summary>
/// 上傳設(shè)置配置節(jié)
/// <remarks>
/// 創(chuàng)建: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>
/// 上傳目錄
/// 為應(yīng)用程序目錄起的文件夾名,前面不帶~/
/// </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>
/// 允許上傳的圖片類型文件擴(kuò)展,多個(gè)用“,”隔開
/// </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類型文件擴(kuò)展,多個(gè)用“,”隔開
/// </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>
/// 允許上傳的媒體類型文件擴(kuò)展,多個(gè)用“,”隔開
/// </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>
/// 允許上傳的文件類型文件擴(kuò)展,多個(gè)用“,”隔開
/// </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;
}
}
}
}
四、讀取配置
也是最關(guān)系的,配置信息怎么讀出來。在上面類寫好后讀取非常容易了,只需用WebConfigurationManager.OpenWebConfiguration("~"). GetSection()獲取配置節(jié)的實(shí)例,局可以使用屬性值了
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);
五、寫入配置
跟讀取類似,把屬性值設(shè)置后save()一下,內(nèi)容就會(huì)保存到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();
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET?MVC5網(wǎng)站開發(fā)之用戶角色的后臺(tái)管理1(七)
- ASP.NET MVC5網(wǎng)站開發(fā)之登錄、驗(yàn)證和注銷管理員篇1(六)
- ASP.NET?MVC5網(wǎng)站開發(fā)之業(yè)務(wù)邏輯層的架構(gòu)和基本功能(四)
- ASP.NET MVC5網(wǎng)站開發(fā)之實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)層功能(三)
- ASP.NET?MVC5網(wǎng)站開發(fā)之網(wǎng)站設(shè)置(九)
- ASP.NET MVC5網(wǎng)站開發(fā)修改及刪除文章(十)
- ASP.NET MVC5網(wǎng)站開發(fā)添加文章(八)
- ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)
- ASP.NET?MVC5網(wǎng)站開發(fā)用戶登錄、注銷(五)
- MVC4制作網(wǎng)站教程第一篇 緒論
相關(guān)文章
asp.net下使用Request.From獲取非服務(wù)器控件的值的方法
asp.net下使用Request.From獲取非服務(wù)器控件的值的方法,需要的朋友可以參考下。2010-03-03
ASP.NET獲取MS SQL Server安裝實(shí)例實(shí)現(xiàn)思路及代碼
在演示中,是把找到的實(shí)例顯示于DropDownList控件中。首先在.aspx拉一個(gè)DropDownList控件,感興趣的朋友可以了解下哦,或許對(duì)你有所幫助2013-01-01
ASP.NET Core實(shí)現(xiàn)自定義WebApi模型驗(yàn)證詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core實(shí)現(xiàn)自定義WebApi模型驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Linux服務(wù)器下利用Docker部署.net Core項(xiàng)目的全過程
這篇文章主要給大家介紹了關(guān)于在Linux服務(wù)器下利用Docker部署.net Core項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺(tái)包
這篇文章主要為大家詳細(xì)介紹了Asp.NetCore1.1版本去掉project.json后如何打包生成跨平臺(tái)包 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
微信公眾平臺(tái)開發(fā)之發(fā)送圖文消息.Net代碼解析
這篇文章主要為大家詳細(xì)解析了微信公眾平臺(tái)開發(fā)之發(fā)送圖文消息.Net代碼,感興趣的小伙伴們可以參考一下2016-06-06

