Atributos Personalizados
Para crear un atributo personalizado en .NET, puedes heredar directamente de la clase Attribute
o, para validaciones específicas, de la clase ValidationAttribute
.
🔹Heredando de Attribute
🔹Heredando de ValidationAttribute
El método IsValid
sirve para definir la lógica específica que determina si el valor de una propiedad cumple con ciertos criterios de validación.
La clase base ValidationAttribute
ofrece dos sobrecargas principales del método IsValid
para proporcionar flexibilidad en la implementación de la lógica de validación personalizada. Estas sobrecargas permiten validar un valor de entrada con o sin contexto adicional proporcionado por ValidationContext
.
🔹 IsValid(object value)
Descripción: Esta sobrecarga toma un único parámetro,
value
, que representa el valor de la propiedad a validar. El método devuelve un booleano (bool
) que indica si el valor es válido (true
) o no (false
).Uso: Es útil para validaciones simples donde solo necesitas examinar el valor de la propiedad sin necesidad de información adicional sobre el contexto de la propiedad o el objeto al que pertenece.
🔹 IsValid(object value, ValidationContext validationContext)
Descripción: Esta sobrecarga proporciona un
ValidationContext
adicional junto con el valor a validar.ValidationContext
ofrece información sobre el contexto específico de la validación, incluido el objeto que contiene el valor a validar, y permite implementar lógicas de validación más complejas que pueden depender de múltiples propiedades del objeto.Uso: Esencial para validaciones complejas donde el resultado puede depender no solo del valor actual sino también de otros valores o propiedades del objeto. Permite devolver un
ValidationResult
que puede incluir mensajes de error personalizados y los nombres de los miembros específicos que no pasaron la validación.
📘 Consideraciones Importantes
Elección de Sobrecarga: La elección entre las sobrecargas depende de la complejidad de la validación necesaria. Para reglas simples,
IsValid(object value)
puede ser suficiente. Para reglas que requieren contexto adicional o que involucran múltiples propiedades del objeto,IsValid(object value, ValidationContext validationContext)
es la opción preferida.Devolución de Errores: Mientras que la sobrecarga que devuelve un
bool
simplemente indica si el valor es válido o no, la sobrecarga que devuelve unValidationResult
permite proporcionar mensajes de error específicos y detallados, lo cual es útil para informar a los usuarios sobre la naturaleza de los errores de validación.
🔹Uso de ValidationResult
ValidationResult
se usa comúnmente en la implementación de la lógica de validación personalizada. Cuando heredas de ValidationAttribute
para crear una regla de validación personalizada, el método IsValid
debe retornar un objeto ValidationResult
para indicar si el valor evaluado cumple o no con la regla establecida.
Si la validación es exitosa, debes retornar
ValidationResult.Success
para indicar que no hubo errores.Si la validación falla, debes crear una instancia de
ValidationResult
proporcionando un mensaje de error y, opcionalmente, los nombres de los miembros que no pasaron la validación.
Última actualización