繁体   English   中英

如何从web.config中读取自定义部分下的所有元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM