0

カスタム Web 構成クラスがあります。次のような Web 構成プロパティに属性として RegexStringValidator を追加したいと考えています。

[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 に答える