{"id":1166,"date":"2022-01-16T22:40:19","date_gmt":"2022-01-16T19:40:19","guid":{"rendered":"http:\/\/delimuhendis.org\/?p=1166"},"modified":"2022-12-20T22:57:11","modified_gmt":"2022-12-20T22:57:11","slug":"net-core-ve-web-api-backend-validationfluent-validation","status":"publish","type":"post","link":"https:\/\/www.delimuhendis.org\/?p=1166","title":{"rendered":"Net Core ve Web API: Backend Validation(Fluent Validation)"},"content":{"rendered":"\n<p>Merhaba, arkada\u015flar! <\/p>\n\n\n\n<p>Bug\u00fcn sizinle yeni bir konuyu irdeleyece\u011fiz. O da validasyon i\u015flemleri. Validasyon, \u00f6n taraftan sa\u011flanan verilerin arka tarafta i\u015fleme al\u0131nmas\u0131ndan \u00f6nce istenilen formatta olup olmad\u0131\u011f\u0131n\u0131 denetleme i\u015flemidir. \u00d6rnek vermek gerekirse, kullan\u0131c\u0131 login i\u015flemlerinde hem kullan\u0131c\u0131 ad\u0131n\u0131n hem \u015fifresinin d\u00fczg\u00fcn bir \u015fekilde girilip girilmedi\u011fini login i\u015flemi arka tarafta uygulanmadan \u00f6nce denetleme validasyon i\u015flemlerine bir \u00f6rnektir. Validasyon hem backend hem de frontend(MVC) olarak ger\u00e7ekle\u015ftirilebilir. Frontend validasyon konusunu daha sonra i\u015fleyece\u011fiz. Bug\u00fcn sizinle fluent validasyon k\u00fct\u00fcphanesini kullanarak backend validasyon i\u015flemlerini ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dotnet add package FluentValidation.AspNetCore<\/code><\/pre>\n\n\n\n<p>yukar\u0131daki komut yard\u0131m\u0131yla gerekli k\u00fct\u00fcphaneyi projemize ekliyoruz. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>services.AddMvc(setup =&gt;{}).AddFluentValidation();<\/code><\/pre>\n\n\n\n<p>K\u00fct\u00fcphaneyi ekledi\u011fimiz projenin Startup s\u0131n\u0131f\u0131n\u0131n \u00e7inde bulunan ConfigureServices methodu i\u00e7erisine yukar\u0131da kodu ekliyoruz. Bu sayede FluentValidation k\u00fct\u00fcphanesi projeye kaydedilmi\u015f oluyor.<\/p>\n\n\n\n<p>Fluent Validation valide edece\u011fi yada etmeyece\u011fi bir nesneye ihtiya\u00e7 duyar. \u00d6rne\u011fin Kullan\u0131c\u0131 kayd\u0131 i\u015flemi i\u00e7in FrontEnd&#8217;ten BackEnd&#8217;e PostUser diye bir nesne yolluyorsak bu nesneyi valide edebilmek i\u00e7in Fluent Validation&#8217;a da input olarak vermeliyiz. Valide edece\u011fimiz \u00f6rnek nesneyi a\u015fa\u011f\u0131daki gibi olu\u015fturuyoruz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class PostUser\n{\n    public string Username { get; set; }\n    public string Password { get; set; }\n}<\/code><\/pre>\n\n\n\n<p>\u015eimdi de yukar\u0131daki nesnemizi valide edecek ve kurallar\u0131n\u0131 belirleyece\u011fimiz s\u0131n\u0131f\u0131m\u0131z\u0131 yazal\u0131m.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class PostUserValidation: AbstractValidator&lt;PostUser&gt;\n{\n    public PostUserValidation()\n    {\n\tRuleFor(x =&gt; x.Username).Length(0, 10).NotNull();\n\tRuleFor(x =&gt; x.Password).Length(8, 16).NotNull();\n    }\n}<\/code><\/pre>\n\n\n\n<p>Burada hem kullan\u0131c\u0131 ad\u0131 hem \u015fifrenin bo\u015f olup olmad\u0131\u011f\u0131n\u0131 denetliyoruz ve olmas\u0131 gereken karakter uzunlu\u011funda olup olmad\u0131\u011f\u0131n\u0131 test ediyoruz. \u015eimdi art\u0131k test edebilmemiz i\u00e7in her \u015fey haz\u0131r a\u015fa\u011f\u0131daki kod ile girdimizin ge\u00e7erli ve istenilen bir formatta girdi olup olmad\u0131\u011f\u0131n\u0131 test edebiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var user = new PostUser() { Username = \"Username\", Password = \"123\" }; \/\/ \u00d6rnek input\nPostUserValidation validator = new PostUserValidation();\nvar validationResult = validator.Validate(user);\nvar isValid = validationResult.IsValid;\nif(isValid)\n{\n   \/\/ Yap\u0131lacaklar\n}<\/code><\/pre>\n\n\n\n<p>Bu \u015fekilde backend validasyon i\u015flemimizi tamamlad\u0131k. Sonraki dersimizde frontend(MVC) validasyonlar\u0131 irdeleyece\u011fiz.  \u0130yi Kodlamalar!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba, arkada\u015flar! Bug\u00fcn sizinle yeni bir konuyu irdeleyece\u011fiz. O da validasyon i\u015flemleri. Validasyon, \u00f6n taraftan sa\u011flanan verilerin arka tarafta i\u015fleme&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1368,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[69,154,216,223,414,595,596,609],"class_list":["post-1166","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","tag-backend","tag-dersleri","tag-fluent-validation","tag-frontend","tag-net-core","tag-validate","tag-validation","tag-web-api"],"_links":{"self":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1166","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1166"}],"version-history":[{"count":2,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1166\/revisions"}],"predecessor-version":[{"id":1457,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1166\/revisions\/1457"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/media\/1368"}],"wp:attachment":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1166"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1166"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1166"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}