I tenido este problema por un tiempo, luego me di cuenta de que los validadores de No por hacer atributos o elementos requeridos, son para validarlos.
Para hacer que una propiedad necesaria que necesita para utilizar el isRequired y ConfigrationPropertyOptions.IsRequired, por ejemplo,
[ConfigurationProperty("casLogoutUrl", DefaultValue = null, IsRequired = true, Options = ConfigurationPropertyOptions.IsRequired)]
[StringValidator(MinLength=10)]
O (si se utiliza el API)
ConfigurationProperty casLoginUrl = new ConfigurationProperty("casLoginUrl", typeof(string), null, null, new StringValidator(1), ConfigurationPropertyOptions.IsRequired);
Al hacer esto, el marco de configuración se encargará de la propiedad que se requiere en sí, y el validador mangos validar lo que está en el valor. Los validadores no están hechos para hacer algo requerido.
Esto también funciona en los elementos para que los elementos secundarios necesarios. P.ej. si está haciendo una ConfigSection personalizada con elementos secundarios y necesita un elemento secundario para ser necesario. Sin embargo, si crea un CustomValidator que hereda de ConfigurationValidatorBase, debe hacer uso de ElementInformation.IsPresent, p.
public override void Validate(object value)
{
CredentialConfigurationElement element = (CredentialConfigurationElement)value;
if (!element.ElementInformation.IsPresent)
return; //IsRequired is handle by the framework, don't throw error here only throw an error if the element is present and it fails validation.
if (string.IsNullOrEmpty(element.UserName) || string.IsNullOrEmpty(element.Password))
throw new ConfigurationErrorsException("The restCredentials element is missing one or more required Attribute: userName or password.");
}
Para resumir, se echa en falta la parte de su atributo de opciones para que sea obligatorio y no debe utilizar StringValidator (MINLENGTH = 1) para que sea necesario. De hecho, StringValidator (MinLength = 1) es completamente redundante.Si lo hace necesario, es imposible que MinLength = 1 falle sin la falla obligatoria primero, porque si está presente, se garantiza que tendrá al menos 1 carácter de longitud.
Cambiar la validador para
[ConfigurationProperty("appCode", IsRequired = true, Options=ConfigurationPropertyOptions.IsRequired)]
Entonces zanja el validador cadena.
He leído que la serie entera, por desgracia, no explica por qué estoy recibiendo el error. –
¿Ha intentado inicializar la propiedad ApplicationCode con un valor predeterminado (válido)? Parece que la regla de validación falla en algún momento antes de que se lea el valor del archivo de configuración. – Shackles
Sí, y funciona bien con los valores predeterminados. Sin embargo, no todos los campos tienen valores predeterminados válidos/razonables, especialmente los opcionales, por lo que es molesto que no parezca inicializarse desde la configuración. –