[英]How to read all element under a custom section from web.config
我想通过useragent和regex过滤某些浏览器,因此将过滤规则放在web.config中似乎是一个很好的解决方案。
但是我不知道如何从web.config中读取自定义部分下的所有元素。
这是我的配置:
<configuration>
<system.webServer>
<modules>
<add name="ViewFilterModule" type="ViewFilterModule"/>
</modules>
<configSections>
<sectionGroup name="ViewFilterGroup">
<section
name="ViewFilter"
type="CMG.ViewFilter"
allowLocation="true"
allowDefinition="Everywhere"
/>
</sectionGroup>
</configSections>
<ViewFilterGroup>
<ViewFilter name="ucweb" regex="ucweb" redirect="~/ucweb.html" />
<ViewFilter name="operamini" regex="opera mini" redirect="~/operamini.html" />
<ViewFilter name="ucweb" regex="ucweb" redirect="~/ucweb.html" />
<ViewFilter name="operamini" regex="opera mini" redirect="~/operamini.html" />
<ViewFilter name="ucweb" regex="ucweb" redirect="~/ucweb.html" />
<ViewFilter name="operamini" regex="opera mini" redirect="~/operamini.html" />
</ViewFilterGroup>
</system.webServer>
</configuration>
这是我的代码:
public class ViewFilterSection : ConfigurationSection
{
[ConfigurationProperty("name", DefaultValue = "", IsRequired = true)]
[StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 20)]
public String Name
{
get
{
return (String)this["name"];
}
set
{
this["name"] = value;
}
}
[ConfigurationProperty("regex", DefaultValue = "", IsRequired = false)]
public String Regex
{
get
{ return (String)this["regex"]; }
set
{ this["regex"] = value; }
}
[ConfigurationProperty("redirect", DefaultValue = "", IsRequired = false)]
public String Redirect
{
get
{ return (String)this["redirect"]; }
set
{ this["redirect"] = value; }
}
}
我只是想读取所有ViewFilter
下元素ViewFilterGroup
在我的自定义moudle。
您缺少的东西很少。
首先,我们需要一个与您的ViewFilter
相对应的类,然后将所有属性移到该类中,例如:
public class ViewFilterElement : ConfigurationElement
{
[ConfigurationProperty("name", DefaultValue = "", IsRequired = true)]
[StringValidator(InvalidCharacters = "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 20)]
public String Name
{
get { return (String)this["name"]; } set { this["name"] = value; }
}
[ConfigurationProperty("regex", DefaultValue = "", IsRequired = false)]
public String Regex
{
get { return (String)this["regex"]; } set { this["regex"] = value; }
}
[ConfigurationProperty("redirect", DefaultValue = "", IsRequired = false)]
public String Redirect
{
get { return (String)this["redirect"]; } set { this["redirect"] = value; }
}
}
然后拥有一个与您的ViewFilterGroup
相对应的ConfigurationElementCollection
属性:
public class ViewFilterCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new ViewFilterElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ViewFilterElement)element).Name;
}
}
然后,在ViewFilterSection
类中,您可以具有一个属性,该属性返回有关新ViewFilterElement
类型的列表,如下所示
public class ViewFilterSection : ConfigurationSection
{
[ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
[ConfigurationCollection(typeof(ViewFilterCollection), AddItemName = "ViewFilter")]
private ViewFilterCollection ViewFilterCollection
{
get { return (ViewFilterCollection)this[string.Empty]; }
set { this[string.Empty] = value; }
}
public static List<ViewFilterElement> ViewFilters
{
get
{
ViewFilterSection sec = (ViewFilterSection)ConfigurationManager.GetSection("ViewFilterGroup");
return sec.ViewFilterCollection.As<ViewFilterElement>().ToList();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.