RegexStringValidator et propriété requise dans un élément de section de configuration personnalisé
Lorsqu'on créé une section de configuration personnalisé, .net permet de valider les entrées grâce aux attributs StringValidator et RegexStringValidator.
J'ai voulu utiliser l'attribut RegexStringValidator sur un élément de ma configuration afin de vérifier que l'entrée contenait un String "simple", j'ai donc écrit ce code :
public class IndexElement : ConfigurationElement
{
[RegexStringValidator(@"[\w\-\.]+")]
[ConfigurationProperty("Name", IsKey = true, IsRequired = true)]
public String Name
{
get { return (String)base["Name"]; }
set { base["Name"] = value; }
}
}
Dans mon fichier de configuration, j'ai rajouté la ligne qui va bien, mais lorsque je charge la configuration j'obtiens cette erreur :
The value for the property 'Name' is not valid. The error is: The value does not conform to the validation regex string '[\w\-\.]+'.
Après quelques recherches, je me suis rendu compte que .net valide également la valeur par défaut, dans mon cas cette valeur vaut null ce qui ne valide pas l'expression régulière.
Pour corriger le problème, il faut renseigner une valeur par défaut, on peut le faire via l'attribut ConfigurationProperty.
[RegexStringValidator(@"[\w\-\.]+")]
[ConfigurationProperty("Name", IsKey = true, IsRequired = true, DefaultValue="abc")]
public String Name
{
get { return (String)base["Name"]; }
set { base["Name"] = value; }
}
La valeur par défaut importe peu, en effet si on ne renseigne pas la propriété, .net va retourner une exception puique nous avons marquer cette propriété comme "Required".