{"id":7968,"date":"2025-05-10T10:13:09","date_gmt":"2025-05-10T13:13:09","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=7968"},"modified":"2025-05-15T18:20:35","modified_gmt":"2025-05-15T21:20:35","slug":"fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/","title":{"rendered":"Valida\u00e7\u00e3o de dados usando Fluent Validation"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Usando o paradigma da<strong> orienta\u00e7\u00e3o a objetos<\/strong>, deveria ser natural iniciar o desenvolvimento pelo <strong>modelo de entidades<\/strong>, onde as classes s\u00e3o definidas para representar o dom\u00ednio do neg\u00f3cio.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Posteriormente, e a partir destas classes, seria gerado o<strong> <a href=\"https:\/\/geekblogti.wpengine.com\/sql-nosql-newsql-qual-banco-de-dados-usar\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"banco de dados (abre numa nova aba)\">banco de dados<\/a> <\/strong>usado pela aplica\u00e7\u00e3o para realizar a persist\u00eancia das informa\u00e7\u00f5es.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A realidade n\u00e3o \u00e9 bem assim. Na maioria das vezes vemos bancos de dados j\u00e1 projetados.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">O Data Annotation<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para facilitar que as informa\u00e7\u00f5es sejam inseridas corretamente, o pessoal do desenvolvimento utiliza quase 100% dos atributos <strong>Data Annotation<\/strong> \u2014 que foram introduzidos no<strong> .NET 3.5<\/strong> como uma forma de adicionar a valida\u00e7\u00e3o para as classes usadas por aplica\u00e7\u00f5es <strong>ASP.NET.<\/strong>\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como tudo na vida tende a evoluir, vamos comparar um pouco o <strong>Data Annotation<\/strong> com o <strong>FluentValidation<\/strong>, nos baseando na sua facilidade de criar c\u00f3digos limpos (<em>clean code<\/em>) mas, principalmente na sua forma de <strong>tratamento das valida\u00e7\u00f5es<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cen\u00e1rio: Vamos imaginar uma<em> view<\/em> com diversos campos e, em um dado momento, o usu\u00e1rio submete para o servidor.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <strong>Data Annotation<\/strong> define os requisitos das propriedades e valida\u00e7\u00e3o das entidades e, caso haja algum erro, retorna o formul\u00e1rio para o usu\u00e1rio.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">At\u00e9 ai, beleza. S\u00f3 que, a cada submiss\u00e3o, os erros s\u00e3o tratados um a um.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No <strong>FluentValidation<\/strong> isso n\u00e3o funciona, \u00e9 criado um \u201c<em>dicion\u00e1rio de erros<\/em>\u201d, que s\u00f3 ser\u00e1 submetido quando todos erros forem eliminados na view, assim n\u00e3o temos um <strong>vai e volta do servidor<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt;Leitura Recomendada:<\/strong><br \/><em>Usando o <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/utilizando-a-biblioteca-mediatr-com-asp-net-core\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"MediatR  (abre numa nova aba)\"><strong><em>MediatR <\/em><\/strong><\/a><em>com ASP.NET Core<\/em><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">O que \u00e9 Fluent Validation?<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Fluent Validation \u00e9 uma <strong>biblioteca <\/strong>que veio para criar <strong>valida\u00e7\u00f5es de dados<\/strong> de forma simples e r\u00e1pida para os desenvolvedores.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com ela, podemos usar express\u00f5es <strong>Lambda<\/strong> para \u201c<em>construir regras de valida\u00e7\u00f5es<\/em>\u201d com retorno de mensagem de erro para cada propriedade das entidades.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Podemos criar projetos de teste (tenho no meu <a href=\"https:\/\/github.com\/hamiltonoliveira\/FluentValidador\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"GitHub (abre numa nova aba)\"><strong>GitHub<\/strong><\/a> um exemplo) em que os retornos s\u00e3o leg\u00edveis.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando um projeto \u00e9 100% criado em <strong>Fluent Validation<\/strong>, o pessoal de teste tem muito menos afazeres pois o teste ocorre paralelamente ao desenvolvimento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt;Leitura Recomendada:<\/strong><br \/><em>Os 5 <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/os-5-melhores-frameworks-de-python\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"melhores frameworks de Python (abre numa nova aba)\"><strong><em>melhores frameworks de Python<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Instalando Fluent Validation no ASP.NET CORE<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para habilitar a<strong> integra\u00e7\u00e3o MVC<\/strong>, voc\u00ea precisar\u00e1 adicionar uma refer\u00eancia ao:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> FluentValidation.AspNetCoreassembly <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Instalando o <strong>pacote NuGet<\/strong> apropriado<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> Install-Package FluentValidation.AspNetCore <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Depois de instalado, voc\u00ea precisar\u00e1 configurar o <strong>Fluent Validation <\/strong>na classe<em> Startup <\/em>do seu aplicativo chamando o <strong>AddFluentValidation<\/strong>, m\u00e9todo de extens\u00e3o dentro do <strong>ConfigureServices<\/strong>, m\u00e9todo que requer a <strong>using FluentValidation.AspNetCore<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Este m\u00e9todo deve ser chamado diretamente ap\u00f3s a chamada AddMvc:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> public void ConfigureServices(IServiceCollection services) {\r\n\u00a0\u00a0\u00a0\u00a0services.AddMvc(setup =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/...mvc setup...\r\n\u00a0\u00a0\u00a0\u00a0}).AddFluentValidation();\r\n}\r\n\r\n <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para que o ASP.NET descubra seus validadores, eles devem estar registrados na cole\u00e7\u00e3o de servi\u00e7os.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea pode fazer isso chamando o<strong> AddTransient, <\/strong>m\u00e9todo para cada um dos seus validadores&#8230;<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> public void ConfigureServices(IServiceCollection services) {\r\n\u00a0\u00a0\u00a0\u00a0services.AddMvc(setup =&gt; {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/...mvc setup...\r\n\u00a0\u00a0\u00a0\u00a0}).AddFluentValidation();\r\n}\r\n\r\n <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&#8230; Ou usando o <strong>AddFromAssemblyContaining<\/strong>, m\u00e9todo para registrar automaticamente todos os validadores em uma montagem espec\u00edfica.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso encontrar\u00e1 automaticamente quaisquer tipos <em>p\u00fablicos n\u00e3o abstratos <\/em>que herdam <strong>AbstractValidatore<\/strong> e est\u00e3o registrados no cont\u00eainer (os gen\u00e9ricos abertos n\u00e3o s\u00e3o suportados).<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> services.AddMvc()\r\n\u00a0\u00a0.AddFluentValidation(fv =&gt; fv.RegisterValidatorsFromAssemblyContaining&lt;PersonValidator&gt;()); <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Este exemplo sup\u00f5e que o<strong> PersonValidato<\/strong>r esteja definido para validar uma classe chamada <strong>Person<\/strong>:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> public class Person {\r\n public int Id { get; set; }\r\n public string Name { get; set; }\r\n public string Email { get; set; }\r\n public int Age { get; set; }\r\n}\r\n\r\npublic class PersonValidator : AbstractValidator&lt;Person&gt; {\r\n public PersonValidator() {\r\n RuleFor(x =&gt; x.Id).NotNull();\r\n RuleFor(x =&gt; x.Name).Length(0, 10);\r\n RuleFor(x =&gt; x.Email).EmailAddress();\r\n RuleFor(x =&gt; x.Age).InclusiveBetween(18, 60);\r\n }\r\n}\r\n\r\n <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">E aqui est\u00e1 a visualiza\u00e7\u00e3o (<em>view<\/em>) correspondente (<em>usando o Razor<\/em>):<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> @model Person\r\n\r\n&lt;div asp-validation-summary=\"ModelOnly\"&gt;&lt;\/div&gt;\r\n\r\n&lt;form asp-action=\"Create\"&gt;\r\n\u00a0\u00a0Id: &lt;input asp-for=\"Id\" \/&gt; &lt;span asp-validation-for=\"Id\"&gt;&lt;\/span&gt;\r\n\u00a0\u00a0&lt;br \/&gt;\r\n\u00a0\u00a0Name: &lt;input asp-for=\"Name\" \/&gt; &lt;span asp-validation-for=\"Name\"&gt;&lt;\/span&gt;\r\n\u00a0\u00a0&lt;br \/&gt;\r\n\u00a0\u00a0Email: &lt;input asp-for=\"Email\" \/&gt; &lt;span asp-validation-for=\"Email\"&gt;&lt;\/span&gt;\r\n\u00a0\u00a0&lt;br \/&gt;\r\n\u00a0\u00a0Age: &lt;input asp-for=\"Age\" \/&gt; &lt;span asp-validation-for=\"Age\"&gt;&lt;\/span&gt;\r\n\r\n\u00a0\u00a0&lt;br \/&gt;&lt;br \/&gt;\r\n\u00a0\u00a0&lt;input type=\"submit\" value=\"submtit\" \/&gt;\r\n&lt;\/form&gt;\r\n\r\n <\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt;Leitura Recomendada:<\/strong><br \/><em>Melhores <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/melhores-linguagens-de-programacao-para-devs-iniciantes\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"linguagens de programa\u00e7\u00e3o para devs iniciantes (abre numa nova aba)\"><strong><em>linguagens de programa\u00e7\u00e3o para devs iniciantes<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Compatibilidade com a valida\u00e7\u00e3o interna do ASP.NET<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por padr\u00e3o, ap\u00f3s a execu\u00e7\u00e3o do <strong>Fluent Validation<\/strong>, qualquer outro provedor de validador tamb\u00e9m ter\u00e1 a chance de executar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso significa que voc\u00ea pode misturar<strong> Fluent Validation<\/strong> com atributos <strong>Data Annotations<\/strong> (ou qualquer outra implementa\u00e7\u00e3o do <strong>ASP.NET ModelValidatorProvider<\/strong>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se voc\u00ea deseja desativar esse comportamento para que <strong>Fluent Validation<\/strong> seja a \u00fanica biblioteca de valida\u00e7\u00e3o executada, defina o <strong>RunDefaultMvcValidationAfterFluentValidationExecutes<\/strong> como false na rotina de inicializa\u00e7\u00e3o do aplicativo:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\"> services.AddMvc().AddFluentValidation(fv =&gt; {\r\n\u00a0fv.RunDefaultMvcValidationAfterFluentValidationExecutes = false;\r\n});\r\n\r\n<\/pre>\r\n\r\n\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Valida\u00e7\u00e3o de propriedade filho impl\u00edcita vs expl\u00edcita<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao validar gr\u00e1ficos de<strong> objetos complexos<\/strong>, por padr\u00e3o, voc\u00ea deve especificar explicitamente quaisquer validadores filhos para propriedades complexas usando <strong>SetValidato<\/strong> (consulte a se\u00e7\u00e3o de valida\u00e7\u00e3o de <a href=\"https:\/\/fluentvalidation.net\/start.html#complex-properties\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"propriedades complexas no Fluent Validation (abre numa nova aba)\"><strong>propriedades complexas no Fluent Validation<\/strong><\/a>)<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao executar um aplicativo <strong>ASP.NET MVC<\/strong>, voc\u00ea tamb\u00e9m pode habilitar a valida\u00e7\u00e3o impl\u00edcita para propriedades filho.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quando isso estiver ativado, em vez de precisar especificar validadores filhos usando <strong>SetValidator<\/strong>, a infraestrutura de<strong> valida\u00e7\u00e3o do MVC<\/strong> tentar\u00e1 recursivamente encontrar validadores para cada propriedade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso pode ser feito configurando <strong>ImplicitlyValidateChildProperties<\/strong> como <strong>true<\/strong>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Observe que, se voc\u00ea habilitar esse comportamento, n\u00e3o dever\u00e1 usar <strong>SetValidator<\/strong> para propriedades filho, ou o validador ser\u00e1 executado duas vezes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por hoje foi isso, pessoal, espero que tenham gostado do conte\u00fado sobre <strong>Fluent Validation<\/strong>, qualquer d\u00favida me procurem nas redes sociais ou nos coment\u00e1rios do blog!<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>&gt;&gt;Leitura Recomendada:<\/strong><br \/><em>Dicas de <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/dicas-de-carreira-para-programadores-net\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Carreira para Programadores .NET (abre numa nova aba)\"><strong><em>Carreira para Programadores .NET<\/em><\/strong><\/a><\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Usando o paradigma da orienta\u00e7\u00e3o a objetos, deveria ser natural iniciar o desenvolvimento pelo modelo de entidades, onde as classes s\u00e3o definidas para representar o dom\u00ednio do neg\u00f3cio. Posteriormente, e a partir destas classes, seria gerado o banco de dados usado pela aplica\u00e7\u00e3o para realizar a persist\u00eancia das informa\u00e7\u00f5es. A realidade n\u00e3o \u00e9 bem assim. [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":7974,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-7968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Fluent Validation: Valida\u00e7\u00e3o Simplificada para Aplica\u00e7\u00f5es ASP.NET<\/title>\n<meta name=\"description\" content=\"Nesse artigo falamos sobre como usar a biblioteca Fluent Validation para agilizar seu processo de valida\u00e7\u00e3o de dados. Leia!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Valida\u00e7\u00e3o de dados usando Fluent Validation\" \/>\n<meta property=\"og:description\" content=\"Usando o paradigma da orienta\u00e7\u00e3o a objetos, deveria ser natural iniciar o desenvolvimento pelo modelo de entidades, onde as classes s\u00e3o definidas para\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-10T13:13:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-15T21:20:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1366\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"Valida\u00e7\u00e3o de dados usando Fluent Validation\",\"datePublished\":\"2025-05-10T13:13:09+00:00\",\"dateModified\":\"2025-05-15T21:20:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/\"},\"wordCount\":801,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/\",\"name\":\"Fluent Validation: Valida\u00e7\u00e3o Simplificada para Aplica\u00e7\u00f5es ASP.NET\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg\",\"datePublished\":\"2025-05-10T13:13:09+00:00\",\"dateModified\":\"2025-05-15T21:20:35+00:00\",\"description\":\"Nesse artigo falamos sobre como usar a biblioteca Fluent Validation para agilizar seu processo de valida\u00e7\u00e3o de dados. Leia!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg\",\"width\":1366,\"height\":768,\"caption\":\"imagem com fundo roxo logo da geekhunter e logo do fluent validation\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Valida\u00e7\u00e3o de dados usando Fluent Validation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Fluent Validation: Valida\u00e7\u00e3o Simplificada para Aplica\u00e7\u00f5es ASP.NET","description":"Nesse artigo falamos sobre como usar a biblioteca Fluent Validation para agilizar seu processo de valida\u00e7\u00e3o de dados. Leia!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/","og_locale":"pt_BR","og_type":"article","og_title":"Valida\u00e7\u00e3o de dados usando Fluent Validation","og_description":"Usando o paradigma da orienta\u00e7\u00e3o a objetos, deveria ser natural iniciar o desenvolvimento pelo modelo de entidades, onde as classes s\u00e3o definidas para","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2025-05-10T13:13:09+00:00","article_modified_time":"2025-05-15T21:20:35+00:00","og_image":[{"width":1366,"height":768,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg","type":"image\/jpeg"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"Valida\u00e7\u00e3o de dados usando Fluent Validation","datePublished":"2025-05-10T13:13:09+00:00","dateModified":"2025-05-15T21:20:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/"},"wordCount":801,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/","name":"Fluent Validation: Valida\u00e7\u00e3o Simplificada para Aplica\u00e7\u00f5es ASP.NET","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg","datePublished":"2025-05-10T13:13:09+00:00","dateModified":"2025-05-15T21:20:35+00:00","description":"Nesse artigo falamos sobre como usar a biblioteca Fluent Validation para agilizar seu processo de valida\u00e7\u00e3o de dados. Leia!","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/Fluent-Validation-para-ter-seguran\u00e7a-nas-valida\u00e7\u00f5es-dos-dados.jpg","width":1366,"height":768,"caption":"imagem com fundo roxo logo da geekhunter e logo do fluent validation"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/fluent-validation-para-ter-seguranca-nas-validacoes-dos-dados\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"Valida\u00e7\u00e3o de dados usando Fluent Validation"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/7968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=7968"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/7968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/7974"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=7968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=7968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=7968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}