网站中有很多需要设置的内容,像网站信息,注册设置,上传设置等。如果保存在数据库中需要单独建张表,表中只有一条记录,这样会让数据库很臃肿,而且频繁存取数据库的效率也是个问题。而保存在config文件里是个不错选择,而且带有缓存功能!
我们可以在web.config的配置节写入配置。
1
2
3
4
5
6
|
<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,内容非常简单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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; }
}
}
}
|
二、创建元素集合类。内容很简单都进行了注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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的元素读写。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
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()获取配置节的实例,局可以使用属性值了
1
2
3
4
5
6
7
8
9
10
11
12
|
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中。
代码如下:
1
2
3
4
5
6
7
8
9
|
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();
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/mzwhj/p/3589887.html