自定义Web配置节类中的验证

时间:2012-12-12 07:40:28

标签: asp.net regex web-config

我有一个自定义的Web配置类。我想将RegexStringValidator作为属性添加到Web配置属性中,如:

[ConfigurationProperty("siteDomainName", DefaultValue = "")]
        [RegexStringValidator(@"^([a-zA-Z0-9_-]*(?:\.[a-zA-Z0-9_-]*)+):?([0-9]+)?/?")]
        public string SiteDomainName
        {
            get
            {
                return (string) this["siteDomainName"];
            }
            set 
            { 
                this["siteDomainName"] = value;
            }
        }

我得到的错误是:

  

该值不符合验证正则表达式字符串   '^([A-ZA-Z0-9 _-] *(?:[A-ZA-Z0-9 _-] *)+):???([0-9] +)/'

即使提供的值正确并且与正则表达式匹配。 有什么问题?

1 个答案:

答案 0 :(得分:1)

就像ronen在评论中所说,你的默认值也应该与正则表达式匹配。请参阅此答案,例如:https://stackoverflow.com/a/5313223/4830。原因是即使在web.config文件中设置了值,也会对的默认值进行评估。

这样的东西应该有效(默认值有效,属性是必需的,因此在实践中它永远不应该实际使用默认值):

[ConfigurationProperty("siteDomainName", DefaultValue="www.example.com", IsRequired=True)]
[RegexStringValidator(@"^([a-zA-Z0-9_-]*(?:\.[a-zA-Z0-9_-]*)+):?([0-9]+)?/?")]
public string SiteDomainName
...

如果您不想要默认值,可以通过使整个值基本上是可选的来更改正则表达式以接受空字符串:

[ConfigurationProperty("siteDomainName", IsRequired=False)]
[RegexStringValidator(@"^(([a-zA-Z0-9_-]*(?:\.[a-zA-Z0-9_-]*)+):?([0-9]+)?/?)?$")]
public string SiteDomainName
...

请注意,在两个代码示例中使用IsRequired,使用最符合您需求的代码示例。请注意,始终会验证de default值。