C# - Validação manual com Data Annotations
Hoje veremos como podemos realizar a validação de dados usando o recurso Data Annotations em projetos C#. |
A validação dos dados é a primeira e mais importante etapa na proteção de um aplicativo. Ela impede que o aplicativo processe entradas indesejadas que podem produzir resultados imprevisíveis.
A plataforma .NET oferece o recurso conhecido como DataAnnotation presente no namespace System.ComponentModel.DataAnnotations que possui várias classes e atributos para nos ajudar a validar dados.
Este recurso é
muito usado no framework ASP .NET Core MVC mas
podemos usá-lo em outros tipos de projetos como um projeto Console.
Vejamos isso na prática...
Validando com Data Annotations
Crie um projeto Console do tipo .NET Core chamado CShp_Validacao1;
Inclua uma referência no projeto ao pacote System.ComponentModel.Annotations da seguinte forma:
1- Clique com o botão direito do mouse sobre a Solution;
2- No menu suspenso clique em Manage Nuget Packages for Solution;
3- Na janela clique na guia Browse e selecione o pacote:
Vamos criar em nosso projeto a classe Cliente com 3 propriedades: Nome, Email e Idade e vamos aplicar os atributos DataAnnotations para realizar a validação destes dados:
using System;
using System.ComponentModel.DataAnnotations;
namespace CShp_Validacao1
{
public class Cliente
{
[Required(ErrorMessage = "O email deve ser informado", AllowEmptyStrings = false)]
[EmailAddress(ErrorMessage ="Formato do email inválido")]
public string Email { get; set; }
[Required(ErrorMessage ="O nome deve ser informado")]
[MinLength(3,ErrorMessage ="Nome inválido, informe no mínimo 3 caracteres")]
[MaxLength(50, ErrorMessage = "Nome excedeu o tamanho permitido")]
public string Nome { get; set; }
[Required(ErrorMessage = "O Idade deve ser informada")]
[Range(18, 99, ErrorMessage ="A idade deve estar entre 18 e 99")]
public int Idade { get; set; }
}
}
|
Para realizar a validação dos dados estamos usando os atributos DataAnnotations:
Observe que podemos personalizar as mensagens de erro a serem exibidas.
Agora para realizar a validação dos dados temos que fazer o seguinte:
A classe Validator define uma classe auxiliar que pode ser usada para validar objetos, propriedades e métodos quando ela está incluída em seus atributos ValidationAttribute associados.
No método Main abaixo temos o código que implementa a validação :
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace CShp_Validacao1
{
class Program
{
static void Main(string[] args)
{
//cria a instância da classe Cliente
Cliente cliente = new Cliente();
// O Email deve ter um formato válido a@b.c
cliente.Email = "formato inválido de email";
// A idade deve estar entre 18 e 99
cliente.Idade = 150;
//O nome deve ter no mínimo 3 caracteres
cliente.Nome = "Zé";
//cria a instância de ValidationContext
var ctx = new ValidationContext(cliente);
// Criando uma lista para tratar o resultado da validação
var resultados = new List<ValidationResult>();
if (!Validator.TryValidateObject(cliente, ctx, resultados, true))
{
foreach (var erros in resultados)
{
Console.WriteLine($"Erro de validação : {erros}");
}
}
Console.ReadLine();
}
}
}
|
Executando o projeto iremos obter o resultado abaixo:
Vemos acima o resultado da validação implementada com os atributos Data Annotations.
Você ainda pode criar seus próprios atributos de validação. Para isso basta estender da classe base ValidationAttribute e sobrescrever o método ValidationResult.
Como exemplo vamos criar um atributo chamado DivisibilidadePorSeteAttribute que valida se número é divisível por 7. Vamos então criar uma classe chamada DivisibilidadePorSeteAttribute com o código abaixo:
using System.ComponentModel.DataAnnotations;
namespace CShp_Validacao1
{
class DivisibilidadePorSeteAttribute : ValidationAttribute
{
public DivisibilidadePorSeteAttribute(): base("{0} não é divisível por 7")
{}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
int valor = (int)value;
bool valido = valor % 7 == 0;
if (valido)
return null;
return new ValidationResult(base.FormatErrorMessage(validationContext.MemberName)
, new string[] { validationContext.MemberName });
}
}
}
|
Agora vamos incluir uma propriedade Numero na classe Cliente e usar o atributo criado:
using System;
using System.ComponentModel.DataAnnotations;
namespace CShp_Validacao1
{
public class Cliente
{
...
...
[DivisibilidadePorSete] public int Numero { get; set; } } } |
Agora vamos atribuir um valor à propriedade : cliente.Numero = 11;
Executando o projeto novamente teremos o resultado a seguir:
Pegue o projeto completo aqui: CShp_Validacao1.zip
"Por isso não desfalecemos; mas, ainda
que o nosso homem exterior se corrompa, o interior, contudo, se renova de dia em
dia."
2 Coríntios 4:16
Referências:
Criando um serviço do Windows
ASP.NET - Trabalhando com Controles de validação
C# - Criando serviços para Windows com o TopShelf
C# - Tratando com serviços do Windows
ASP .NET - Validação com JavaScript - Macoratti.net
WPF - Validação de dados -
ASP .NET MVC - Usando a validação Remota
Entrada de Dados - Validação e Crítica
C # - Validando CNPJ , CPF e PIS