{"id":547,"date":"2021-11-26T22:18:16","date_gmt":"2021-11-26T22:18:16","guid":{"rendered":"https:\/\/okankaradag.com\/?p=547"},"modified":"2021-11-26T22:18:17","modified_gmt":"2021-11-26T22:18:17","slug":"asp-net-core-mvc-fluentvalidation","status":"publish","type":"post","link":"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/asp-net-core-mvc-fluentvalidation","title":{"rendered":"Asp.Net Core  MVC FluentValidation"},"content":{"rendered":"<p>Bu g\u00f6nderide bir <strong>.net core<\/strong> \u00f6rnek projesi yapaca\u011f\u0131z ve bu projede validation i\u015flemlerini kolayla\u015ft\u0131ran <strong>FluentValidation <\/strong>k\u00fct\u00fcphanesini kullanaca\u011f\u0131z.<\/p>\n\n\n\n<h3><strong>Intro<\/strong><\/h3>\n\n\n\n<p>Mvc projelerinde validation i\u015flemleri  <strong>DataAnnotation <\/strong>attributeleri ile sa\u011flan\u0131yor bu y\u00f6ntem ile modelin okunurlu\u011fu d\u00fc\u015f\u00fck oluyor. a\u015fa\u011f\u0131daki gibi bir model hem biraz kar\u0131\u015f\u0131k hem de komplike durumlar i\u00e7in yetersiz kal\u0131yor. \u00d6rne\u011fin Name alan\u0131 dolu ise username zorunlu olsun gibi bir zorunlulu\u011fu yapamay\u0131z. Ayr\u0131ca ilgili modelimizin tek bir g\u00f6revi olmal\u0131 (ViewModel, entity vs.) validasyon i\u015flemlerini farkl\u0131 bir obje yapmal\u0131.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"546\" height=\"268\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Dataannotions.png\" alt=\"\" class=\"wp-image-548\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Dataannotions.png 546w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Dataannotions-300x147.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Dataannotions-18x9.png 18w\" sizes=\"(max-width: 546px) 100vw, 546px\" \/><figcaption>DataAnnotations<\/figcaption><\/figure>\n\n\n\n<p><strong>Projenin olu\u015fturulmas\u0131 ve Paketlerin y\u00fcklenmesi<\/strong><\/p>\n\n\n\n<p><strong>Visual Studio 2022 ve .net 5.0<\/strong> se\u00e7ene\u011fiyle projeyi olu\u015fturuyoruz. (fluentvalidation .net 6.0 tamamen desteklemiyor 27 kas\u0131m 2021 itibariyle)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"613\" height=\"624\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/asp.net-mvc-new-project.png\" alt=\"\" class=\"wp-image-549\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/asp.net-mvc-new-project.png 613w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/asp.net-mvc-new-project-295x300.png 295w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/asp.net-mvc-new-project-12x12.png 12w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/asp.net-mvc-new-project-80x80.png 80w\" sizes=\"(max-width: 613px) 100vw, 613px\" \/><\/figure>\n\n\n\n<p>Nuget \u00fczerinden a\u015fa\u011f\u0131daki paketi kural\u0131m<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"755\" height=\"126\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/FluentValidation.png\" alt=\"\" class=\"wp-image-550\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/FluentValidation.png 755w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/FluentValidation-300x50.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/FluentValidation-18x3.png 18w\" sizes=\"(max-width: 755px) 100vw, 755px\" \/><\/figure>\n\n\n\n<p>Models klas\u00f6r\u00fc i\u00e7ine bir student objesi olu\u015ftural\u0131m<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"518\" height=\"264\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/StudentModel.png\" alt=\"\" class=\"wp-image-551\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/StudentModel.png 518w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/StudentModel-300x153.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/StudentModel-18x9.png 18w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/figure>\n\n\n\n<p>Validators ad\u0131nda bir klas\u00f6r a\u00e7\u0131p i\u00e7ine <strong>StudentValidator <\/strong>ad\u0131nda bir class olu\u015ftural\u0131m.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\" >public class StudentValidator : AbstractValidator&lt;Student&gt;\n{\n    public StudentValidator()\n    {\n        RuleFor(s =&gt; s.Name).NotEmpty().Length(2, 100);\n        RuleFor(s =&gt; s.Surname).NotEmpty().Length(2, 100);\n        RuleFor(s =&gt; s.Email).EmailAddress();\n    }\n}<\/pre><\/div>\n\n\n\n<p>Olu\u015fturdu\u011fumuz validatoru startupda kaydedelim.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\" >services.AddMvc().AddFluentValidation\n(fv =&gt; fv.RegisterValidatorsFromAssemblyContaining&lt;StudentValidator&gt;());<\/pre><\/div>\n\n\n\n<p>Validatoru kaydetmenin birden \u00e7ok yolu var <strong>services.AddTransient&lt;IValidator&lt;Student, StudentValidator>();<\/strong> gibi bir y\u00f6ntemde izlenebilir ama bizim tercihimiz daha h\u0131zl\u0131 ve daha temiz oldu\u011fu i\u00e7in assembly \u015feklinde oldu. b\u00f6ylece b\u00fct\u00fcn abstractvalidator nesnesini miras alan validatorler otomatik kay\u0131t olacak.<\/p>\n\n\n\n<p>Olu\u015fturdu\u011fumuz validator \u015fimdilik basit olacak, daha sonra daha komplike durumlar i\u00e7in d\u00fczeltece\u011fiz. <br>\u015eimdi <strong>StudentController <\/strong>a\u00e7\u0131p bir <strong>Create <\/strong>actionu ve view&#8217;\u0131 olu\u015ftural\u0131m.<\/p>\n\n\n\n<p><strong>StudentController<\/strong>.<strong>cs<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\" >public class StudentController : Controller\n{\n    public IActionResult Index()\n    {\n        return View();\n    }\n    public IActionResult Create()\n    {\n        return View();\n    }\n    [HttpPost]\n    public IActionResult Create(Student student)\n    {\n        if (!ModelState.IsValid)\n        {\n            return View(student);\n        }\n        return View();\n    }\n}<\/pre><\/div>\n\n\n\n<p><strong>Student\/Create.cshtml<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true\" >@model Student\n\n&lt;div asp-validation-summary=&quot;ModelOnly&quot;&gt;&lt;\/div&gt;\n\n&lt;form asp-action=&quot;Create&quot; action=&quot;&quot;&gt;\n  Name: &lt;input asp-for=&quot;Name&quot; \/&gt; &lt;span asp-validation-for=&quot;Name&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n  Surname: &lt;input asp-for=&quot;Surname&quot; \/&gt; &lt;span asp-validation-for=&quot;Surname&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n  Email: &lt;input asp-for=&quot;Email&quot; \/&gt; &lt;span asp-validation-for=&quot;Email&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n\n  &lt;br \/&gt;&lt;br \/&gt;\n  &lt;input type=&quot;submit&quot; value=&quot;Save&quot; \/&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;trp-form-language&quot; value=&quot;en&quot;\/&gt;&lt;\/form&gt;<\/pre><\/div>\n\n\n\n<p>\u00c7al\u0131\u015ft\u0131r\u0131p bakt\u0131\u011f\u0131m\u0131zda validaton elementleri i\u00e7ine otomatik ekledi\u011fini g\u00f6rece\u011fiz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"157\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html-1024x157.png\" alt=\"\" class=\"wp-image-552\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html-1024x157.png 1024w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html-300x46.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html-768x118.png 768w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html-18x3.png 18w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/validation-html.png 1319w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Kaydet t\u0131klay\u0131p breakpointle bakt\u0131\u011f\u0131m\u0131zda ModelState.IsValid false d\u00f6necektir. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"218\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge-1024x218.png\" alt=\"\" class=\"wp-image-553\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge-1024x218.png 1024w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge-300x64.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge-768x163.png 768w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge-18x4.png 18w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/11\/Validation-Messagge.png 1086w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Temel d\u00fczeyde validasyon i\u015flemlerini yapt\u0131k \u015fimdi i\u015fleri biraz daha komplike edelim. validatoru a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirelim.<\/p>\n\n\n\n<p><strong>StudentValidator.cs<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\" >public class StudentValidator : AbstractValidator&lt;Student&gt;\n{\n    public StudentValidator()\n    {\n        RuleFor(s =&gt; s.Name).NotEmpty().Length(2, 100).WithMessage(\"\u0130sim alan\u0131 en az 2 karakter olmak zorundad\u0131r\");\n        RuleFor(s =&gt; s.Surname).NotEmpty().Length(2, 100).WithMessage(\"Soyisim alan\u0131 en az 2 karakter olmak zorundad\u0131r\");\n        RuleFor(s =&gt; s.Email).NotEmpty().EmailAddress().WithMessage(\"E-posta ge\u00e7erli bir format de\u011fil\");\n        RuleFor(s =&gt; s.IdentityNumber).NotEmpty().Length(11).WithMessage(\"Kimlik Numaran\u0131z 11 haneli olmaz zorunda\").When(s =&gt; s.IsTurkish);\n    }\n}<\/pre><\/div>\n\n\n\n<p>Bu durumda hem mesaj i\u00e7eriklerini de\u011fi\u015ftirmi\u015f olduk hem de <strong>sadece T\u00fcrk \u00d6\u011frenciler i\u00e7in T.C girilmesini zorunlu<\/strong> hale getirdik.<\/p>\n\n\n\n<p><strong>Create.cshtml<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true\" >@model Student\n\n&lt;div asp-validation-summary=&quot;ModelOnly&quot;&gt;&lt;\/div&gt;\n\n&lt;form asp-action=&quot;Create&quot; action=&quot;&quot;&gt;\n  Name: &lt;input asp-for=&quot;Name&quot; \/&gt; &lt;span asp-validation-for=&quot;Name&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n  Surname: &lt;input asp-for=&quot;Surname&quot; \/&gt; &lt;span asp-validation-for=&quot;Surname&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n  Email: &lt;input asp-for=&quot;Email&quot; \/&gt; &lt;span asp-validation-for=&quot;Email&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n   IsTurkish: &lt;input asp-for=&quot;IsTurkish&quot; \/&gt; &lt;span asp-validation-for=&quot;IsTurkish&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n  Identity Number: &lt;input asp-for=&quot;IdentityNumber&quot; \/&gt; &lt;span asp-validation-for=&quot;IdentityNumber&quot;&gt;&lt;\/span&gt;\n  &lt;br \/&gt;\n\n  &lt;br \/&gt;&lt;br \/&gt;\n  &lt;input type=&quot;submit&quot; value=&quot;Save&quot; \/&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;trp-form-language&quot; value=&quot;en&quot;\/&gt;&lt;\/form&gt;<\/pre><\/div>\n\n\n\n<p><strong>Client Validation<\/strong><\/p>\n\n\n\n<p>Bu do\u011frulamalar\u0131n hepsini server kaynakl\u0131 yapt\u0131k, daha b\u00fcy\u00fck bir modelde her seferinde servera gidip cevap almak biraz maliyetli olabilir bunun \u00f6n\u00fcne ge\u00e7mek i\u00e7in <strong>jqueryvalidate ve jquery.validate.unobtrusive <\/strong>k\u00fct\u00fcphanelerini kullanaca\u011f\u0131z. Layout.cshtml&#8217;e a\u015fa\u011f\u0131daki iki scripti ekleyelim.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:xhtml decode:true\" >&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery-validate\/1.19.3\/jquery.validate.min.js\" integrity=\"sha512-37T7leoNS06R80c8Ulq7cdCDU5MNQBwlYoy1TX\/WUsLFC2eYNqtKlV0QjH7r8JpG\/S0GUMZwebnVFLPd6SU5yg==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"&gt;&lt;\/script&gt;\n&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery-validation-unobtrusive\/3.2.12\/jquery.validate.unobtrusive.min.js\" integrity=\"sha512-o6XqxgrUsKmchwy9G5VRNWSSxTS4Urr4loO6\/0hYdpWmFUfHqGzawGxeQGMDqYzxjY9sbktPbNlkIQJWagVZQg==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"&gt;&lt;\/script&gt;<\/pre><\/div>\n\n\n\n<p>\u015eimdi formu kaydetti\u011fimiz zaman servera gitmeyecek fakat jquery validation sadece temel i\u015flemleri sa\u011fl\u0131yor notempty, length vs. gibi do\u011frulamalarda servera gitmeden uyar\u0131y\u0131 veriyor, ama <strong>when()<\/strong> kulland\u0131\u011f\u0131m\u0131z komplike durum i\u00e7in servera gitmesi gerekli.<\/p>\n\n\n\n<p><strong>Sonu\u00e7<\/strong><\/p>\n\n\n\n<p>FluentValidation k\u00fct\u00fcphanesi ile validation i\u015flemlerimizi \u00e7ok daha kolay ve h\u0131zl\u0131 yapabiliriz. Validation kurallar\u0131n\u0131 bir s\u00fcr\u00fc y\u00f6ntemle \u00e7e\u015fitlendirebilirsiniz. Bu k\u00fct\u00fcphaneyi sadece mvc de\u011fil apilerinizde de kullanabilirsiniz.<\/p>\n\n\n\n<p>Ba\u015fka bir yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere \ud83d\ude42<\/p>","protected":false},"excerpt":{"rendered":"<p>We're going to look at fluentvalidation which use often .net mvc projects.<\/p>","protected":false},"author":1,"featured_media":339,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[40,65,16,8],"tags":[66,56,12,21,84],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Asp.Net Core MVC FluentValidation - Okan Karada\u011f<\/title>\n<meta name=\"description\" content=\"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/asp-net-core-mvc-fluentvalidation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Asp.Net Core MVC FluentValidation - Okan Karada\u011f\" \/>\n<meta property=\"og:description\" content=\"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/asp-net-core-mvc-fluentvalidation\/\" \/>\n<meta property=\"og:site_name\" content=\"Okan Karada\u011f\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-26T22:18:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-26T22:18:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/06\/asp.net-core-logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"445\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Okan Karada\u011f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Okan Karada\u011f\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#article\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation\"},\"author\":{\"name\":\"Okan Karada\u011f\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"headline\":\"Asp.Net Core MVC FluentValidation\",\"datePublished\":\"2021-11-26T22:18:16+00:00\",\"dateModified\":\"2021-11-26T22:18:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation\"},\"wordCount\":473,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"keywords\":[\"asp.net 5\",\"asp.net core\",\"jquery\",\"MVC\",\"validation\"],\"articleSection\":[\"Asp.Net Core\",\"Asp.Net Core 5.0\",\"Asp.Net MVC\",\"Jquery\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation\",\"url\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation\",\"name\":\"Asp.Net Core MVC FluentValidation - Okan Karada\u011f\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/#website\"},\"datePublished\":\"2021-11-26T22:18:16+00:00\",\"dateModified\":\"2021-11-26T22:18:17+00:00\",\"description\":\"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/okankaradag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Asp.Net Core MVC FluentValidation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/okankaradag.com\/#website\",\"url\":\"https:\/\/okankaradag.com\/\",\"name\":\"Okan Karada\u011f\",\"description\":\"Programlama \u00dczerine\",\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/okankaradag.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\",\"name\":\"Okan Karada\u011f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"caption\":\"Okan Karada\u011f\"},\"logo\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/okankaradag.com\"],\"url\":\"https:\/\/okankaradag.com\/en\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Asp.Net Core MVC FluentValidation - Okan Karada\u011f","description":"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.","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:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/asp-net-core-mvc-fluentvalidation\/","og_locale":"en_US","og_type":"article","og_title":"Asp.Net Core MVC FluentValidation - Okan Karada\u011f","og_description":"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.","og_url":"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/asp-net-core-mvc-fluentvalidation\/","og_site_name":"Okan Karada\u011f","article_published_time":"2021-11-26T22:18:16+00:00","article_modified_time":"2021-11-26T22:18:17+00:00","og_image":[{"width":800,"height":445,"url":"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/06\/asp.net-core-logo.png","type":"image\/png"}],"author":"Okan Karada\u011f","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Okan Karada\u011f","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#article","isPartOf":{"@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation"},"author":{"name":"Okan Karada\u011f","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"headline":"Asp.Net Core MVC FluentValidation","datePublished":"2021-11-26T22:18:16+00:00","dateModified":"2021-11-26T22:18:17+00:00","mainEntityOfPage":{"@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation"},"wordCount":473,"commentCount":0,"publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"keywords":["asp.net 5","asp.net core","jquery","MVC","validation"],"articleSection":["Asp.Net Core","Asp.Net Core 5.0","Asp.Net MVC","Jquery"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#respond"]}]},{"@type":"WebPage","@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation","url":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation","name":"Asp.Net Core MVC FluentValidation - Okan Karada\u011f","isPartOf":{"@id":"https:\/\/okankaradag.com\/#website"},"datePublished":"2021-11-26T22:18:16+00:00","dateModified":"2021-11-26T22:18:17+00:00","description":"Bu g\u00f6nderide asp.net core projelerinde validation i\u015flemlerini kolayla\u015ft\u0131ran FluentValidation k\u00fct\u00fcphanesini inceleyece\u011fiz.","breadcrumb":{"@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/okankaradag.com\/jquery\/asp-net-core-mvc-fluentvalidation#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/okankaradag.com\/"},{"@type":"ListItem","position":2,"name":"Asp.Net Core MVC FluentValidation"}]},{"@type":"WebSite","@id":"https:\/\/okankaradag.com\/#website","url":"https:\/\/okankaradag.com\/","name":"Okan Karada\u011f","description":"Programlama \u00dczerine","publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/okankaradag.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52","name":"Okan Karada\u011f","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","caption":"Okan Karada\u011f"},"logo":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/okankaradag.com"],"url":"https:\/\/okankaradag.com\/en\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/547"}],"collection":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/comments?post=547"}],"version-history":[{"count":4,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/547\/revisions"}],"predecessor-version":[{"id":557,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/547\/revisions\/557"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media\/339"}],"wp:attachment":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media?parent=547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/categories?post=547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/tags?post=547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}