0

我有一个自定义 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] +)?/?'。

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

4

1 回答 1

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在这两个代码示例中,使用最适合您需求的那个。请注意,默认值始终会被验证。

于 2012-12-12T07:57:45.940 回答