Me gustaría utilizar los atributos de validación de datos en un ensamblaje de biblioteca, para que cualquier consumidor de los datos pueda validarlo sin utilizar un ModelBinder (en una aplicación de consola, por ejemplo). ¿Cómo puedo hacerlo?¿Cómo puedo usar los atributos de validación de datos en C# en un contexto que no sea de ASP.NET?
Respuesta
En realidad, esto es muy bueno. Lo utilicé recientemente en una implementación de validación del PMA. La mayoría de las personas terminan escribiendo muchos códigos usando la reflexión para repetir los atributos, pero hay una función incorporada para esto.
var vc = new ValidationContext(myObject, null, null);
return Validator.TryValidateObject(myObject, vc, null, true);
También puede validar atributos en una sola propiedad con nombre. También se puede pasar opcionalmente en una lista con el fin de acceder a los mensajes de error:
var results = new List<ValidationResult>();
var vc = new ValidationContext(myObject, null, null) { MemberName = "UserName"};
var isValid = Validator.TryValidateProperty(value, vc, results);
// get all the errors
var errors = Array.ConvertAll(results.ToArray(), o => o.ErrorMessage);
Las clases System.ComponentModel.DataAnnotations.ValidationAttribute
tienen IsValid
métodos que realizan la lógica de validación. Toman un objeto (el valor del campo que decoran) y devuelven true
o false
.
Puede usar estos atributos, y un poco de reflexión, para hacer rodar su propio validador orientado a aspectos. Pase su validador un objeto, y el validador obtendrá una lista de PropertyInfo
sy FieldInfo
s. Para cada uno de estos, puede llamar al GetCustomAttributes
para buscar los que heredan de ValidationAttribute
, y para cada uno de ellos, llame al IsValid
, pasando el valor de la propiedad o campo. Esto puede hacerse de forma totalmente dinámica sin conocer la estructura de la clase que se va a validar en el momento del diseño.
¿Puedo llamar a la 'TryValidateProperty' pasar una instancia aleatoria de' ValidationAttribute' llevar a cabo en? – Shimmy
- 1. ¿Cómo puedo usar los atributos de datos HTML5 en XHTML?
- 2. ¿Cómo puedo leer los valores de parámetro de contexto/web.xml en un archivo java que no sea de servlet?
- 3. Enhebrado WPF: ¿puedo actualizar el contexto de datos de un control en un hilo que no sea UI?
- 4. ASP.NET Intellisense no funciona en los atributos
- 5. ASP.NET MVC Validación no intrusiva: ¿por qué se necesita contexto?
- 6. ¿Los atributos JsonIgnore no funcionan en ASP.NET?
- 7. ¿Cómo puedo "falsificar" los atributos de estilo C# en Ruby?
- 8. Contexto de validación de rieles
- 9. ASP.NET Validación de anotaciones de datos de MVC ErrorMessageResourceType
- 10. Cómo actualizar los atributos sin validación
- 11. Cómo usar transacciones con un contexto de datos
- 12. Validación ErrorTemplate no aparece en los errores de datos
- 13. ¿Cómo puedo hacer que mi aplicación sea secuenciable en C#?
- 14. ¿Cómo diseñar mi API C# jQuery de modo que no sea confuso de usar?
- 15. ¿Cómo puedo usar un dll C# (managed) que no tengo?
- 16. Cómo usar guiones en los atributos HTML-5 data- * en ASP.NET MVC
- 17. Validación ASP.NET MVC de unicidad
- 18. cómo usar múltiples AdditionalFields en la validación remota - asp.net mvc
- 19. Compresión de datos en Android (que no sea java.util.zip?)
- 20. Agregar reglas de validación jQuery basadas en atributos de datos en un bucle
- 21. Orden de validación al usar anotaciones y atributos personalizados
- 22. ¿Cómo puedo usar los datos colocados en un ViewBag por un filtro en mi vista Error.cshtml?
- 23. vista parcial sin atributos de validación (ASP.NET MVC 3)
- 24. Atributos de C# en los campos
- 25. Cómo crear un NSFetchRequest que filtra los objetos de Datos básicos en función de los atributos Y las relaciones?
- 26. Especifique un nombre de usuario de SQL que no sea dbo en Code First Entity Framework (C# ASP.NET MVC 3)
- 27. DropDownListFor Unobtrusive Validación requerida No obtener los atributos correctos
- 28. C#: Adición de contexto a Parallel.ForEach() en ASP.NET
- 29. ¿Cómo serializar un modelo con todos los atributos de validación de las propiedades individuales?
- 30. Usar Ransack sort_link para los no atributos
Terminé escribiendo mucho código de reflexión para hacer esto mientras esperaba una respuesta :( –
Sí, sorprendentemente, pocos ejemplos sobre el uso de esta API, y cargas utilizando la reflexión! – TheCodeKing
no es un gran admirador de los parámetros de salida, así que planteé una costumbre excepción en su lugar (imposible de ignorar) –