Tooark.Attributes
4.0.1
dotnet add package Tooark.Attributes --version 4.0.1
NuGet\Install-Package Tooark.Attributes -Version 4.0.1
<PackageReference Include="Tooark.Attributes" Version="4.0.1" />
<PackageVersion Include="Tooark.Attributes" Version="4.0.1" />
<PackageReference Include="Tooark.Attributes" />
paket add Tooark.Attributes --version 4.0.1
#r "nuget: Tooark.Attributes, 4.0.1"
#:package Tooark.Attributes@4.0.1
#addin nuget:?package=Tooark.Attributes&version=4.0.1
#tool nuget:?package=Tooark.Attributes&version=4.0.1
Tooark.Attributes
Biblioteca com validadores de atributos para propriedades ou campos, integrados ao System.ComponentModel.DataAnnotations.
Instalação
dotnet add package Tooark.Attributes
Conteúdo
- DocumentValidationAttribute
- EmailValidationAttribute
- LinkVideoValidationAttribute
- PasswordValidationAttribute
- UrlValidationAttribute
- ZipCodeValidationAttribute
- Comportamento comum
Atributos de Validação
Todos os atributos aceitam propertyName, que define o nome do campo usado na mensagem de erro.
1. Validação de Documento
Funcionalidade: Valida o documento pelo formato, com expressão regular, e pelos dígitos verificadores.
Parâmetros:
string type: Tipo de documento a ser validado. Obrigatório.string propertyName: Nome do campo na mensagem de erro. Padrão:"Document".
O tipo é recebido como texto porque argumento de atributo aceita apenas constante — um parâmetro do tipo EDocumentType impediria o atributo de ser aplicado (CS0181). Valores aceitos, sem diferenciar caixa: CPF, RG, CNH, CNPJ, CPF_CNPJ, CPF_RG, CPF_RG_CNH e None.
Um tipo não reconhecido é erro de configuração e faz o atributo lançar InternalServerErrorException na primeira validação, com a mensagem Attributes.DocumentTypeUnknown;{tipo}.
2. Validação de Email
Funcionalidade: Valida se o valor é um endereço de email válido.
Parâmetros:
string propertyName: Nome do campo na mensagem de erro. Padrão:"Email".
3. Validação de Link de Vídeo
Funcionalidade: Valida se o valor é um link de vídeo de algum dos provedores habilitados.
Parâmetros:
string propertyName: Nome do campo na mensagem de erro. Padrão:"Link".bool youtube: Permite link do YouTube. Padrão:true.bool vimeo: Permite link do Vimeo. Padrão:true.bool dailymotion: Permite link do Dailymotion. Padrão:true.
Desabilitar os três provedores é erro de configuração — nenhum link poderia ser aceito — e faz o atributo lançar InternalServerErrorException com a mensagem Attributes.LinkVideoNoProvider;{campo}.
4. Validação de Senha
Funcionalidade: Valida se a senha atende aos critérios de complexidade configurados.
Parâmetros:
bool lowercase: Exige carácter minúsculo. Padrão:true.bool uppercase: Exige carácter maiúsculo. Padrão:true.bool number: Exige carácter numérico. Padrão:true.bool symbol: Exige carácter especial. Padrão:true.int length: Comprimento mínimo. Padrão:8. Valor não positivo assume1.string propertyName: Nome do campo na mensagem de erro. Padrão:"Password".
Os critérios valem exatamente como configurados. Desabilitar todos significa exigir apenas o comprimento, que é uma política legítima: senhas longas sem regra de composição.
5. Validação de URL
Funcionalidade: Valida se o valor é uma URL válida nos protocolos de email (envio e recebimento), FTP, HTTP ou WebSocket.
Parâmetros:
string propertyName: Nome do campo na mensagem de erro. Padrão:"Url".
6. Validação de Código Postal
Funcionalidade: Valida se o valor é um código postal válido.
Parâmetros:
string propertyName: Nome do campo na mensagem de erro. Padrão:"ZipCode".
Comportamento comum
Todos os atributos herdam de TooarkValidationAttribute e compartilham as regras abaixo.
Mensagens de erro. A mensagem é devolvida no ValidationResult de cada validação, e nunca gravada em ErrorMessage. Isso importa porque o framework de validação reaproveita a mesma instância do atributo em todas as validações daquele campo, inclusive concorrentes: gravar no atributo misturaria a mensagem de uma requisição com a de outra.
Sem configuração, a mensagem é uma chave de tradução no formato Chave;Campo:
| Situação | Mensagem |
|---|---|
| Campo não informado | Field.Required;{campo} |
| Valor não corresponde à regra | Field.Invalid;{campo} |
Se você configurar ErrorMessage ou ErrorMessageResourceName no atributo, essa mensagem é usada no lugar da chave.
Valor ausente. Valor nulo, vazio ou composto apenas por espaços é reportado como Field.Required. Ou seja, os atributos implicam obrigatoriedade — eles não seguem a convenção do DataAnnotations, em que validadores que não são [Required] aceitam nulo. Para um campo opcional, valide fora do atributo ou aplique-o condicionalmente.
Valores que não são texto. O valor é convertido com ToString() antes da validação, então um Uri ou um tipo próprio com ToString() adequado funciona.
Tempo limite das expressões regulares. Cada expressão regular roda com limite de 300 ms. Entrada que provoca retrocesso excessivo é reprovada, e não deixa a exceção subir do atributo.
Erro de configuração. Configuração impossível — tipo de documento desconhecido, link de vídeo sem provedor — lança InternalServerErrorException na primeira validação. Não é falha do dado, e sim do atributo aplicado no código; as chaves estão em Tooark.Attributes.Messages.AttributeErrorMessages.
Exemplo de Uso
Validação de Documento
using Tooark.Attributes;
public class Pessoa
{
[DocumentValidation("CPF")]
public string Cpf { get; set; } = null!;
[DocumentValidation("CPF_CNPJ", propertyName: "Documento")]
public string Documento { get; set; } = null!;
}
Validação de Email
using Tooark.Attributes;
public class Contato
{
[EmailValidation]
public string Email { get; set; } = null!;
// Com mensagem própria, que tem precedência sobre a chave padrão
[EmailValidation(ErrorMessage = "Informe um e-mail corporativo")]
public string EmailCorporativo { get; set; } = null!;
}
Validação de Link de Vídeo
using Tooark.Attributes;
public class Aula
{
[LinkVideoValidation]
public string Video { get; set; } = null!;
// Apenas YouTube, com nome de campo próprio na mensagem
[LinkVideoValidation("Apresentacao", youtube: true, vimeo: false, dailymotion: false)]
public string Apresentacao { get; set; } = null!;
}
Validação de Senha
using Tooark.Attributes;
public class Credencial
{
[PasswordValidation]
public string Senha { get; set; } = null!;
// Frase secreta: sem regra de composição, com comprimento mínimo de 20
[PasswordValidation(false, false, false, false, 20)]
public string FraseSecreta { get; set; } = null!;
}
Validação de URL
using Tooark.Attributes;
public class Site
{
[UrlValidation]
public string Endereco { get; set; } = null!;
}
Validação de Código Postal
using Tooark.Attributes;
public class Endereco
{
[ZipCodeValidation]
public string Cep { get; set; } = null!;
}
Lendo o resultado da validação
using System.ComponentModel.DataAnnotations;
var pessoa = new Pessoa { Cpf = "11111111111" };
var resultados = new List<ValidationResult>();
Validator.TryValidateObject(pessoa, new ValidationContext(pessoa), resultados, true);
foreach (var resultado in resultados)
{
// resultado.ErrorMessage -> "Field.Invalid;Document"
// resultado.MemberNames -> ["Cpf"]
}
Dependências
Contribuição
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests no repositório Tooark.Attributes.
Licença
Este projeto está licenciado sob a licença BSD 3-Clause. Veja o arquivo LICENSE para mais detalhes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Tooark.Enums (>= 4.0.1)
- Tooark.Exceptions (>= 4.0.1)
- Tooark.Validations (>= 4.0.1)
-
net8.0
- Tooark.Enums (>= 4.0.1)
- Tooark.Exceptions (>= 4.0.1)
- Tooark.Validations (>= 4.0.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Tooark.Attributes:
| Package | Downloads |
|---|---|
|
Tooark
Package with all Tooark resources for .NET applications. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.1 | 100 | 8/25/2026 |
| 4.0.0 | 104 | 8/25/2026 |
| 3.3.5 | 96 | 8/25/2026 |
| 3.3.4 | 104 | 8/12/2026 |
| 3.3.3 | 114 | 7/27/2026 |
| 3.3.2 | 265 | 6/11/2026 |
| 3.3.1 | 149 | 6/6/2026 |
| 3.3.0 | 156 | 4/17/2026 |
| 3.2.3 | 143 | 4/17/2026 |
| 3.2.2 | 153 | 3/23/2026 |
| 3.2.1 | 138 | 3/23/2026 |
| 3.2.0 | 152 | 1/21/2026 |
| 3.1.0 | 149 | 1/10/2026 |
| 3.0.0 | 157 | 1/9/2026 |
| 2.3.4 | 95 | 8/25/2026 |
| 2.3.3 | 108 | 7/27/2026 |
| 2.3.2 | 137 | 4/17/2026 |
| 2.3.1 | 139 | 3/23/2026 |
| 2.3.0 | 146 | 1/21/2026 |
| 2.2.1 | 152 | 1/6/2026 |