{"id":1171,"date":"2022-01-24T00:16:37","date_gmt":"2022-01-23T21:16:37","guid":{"rendered":"http:\/\/delimuhendis.org\/?p=1171"},"modified":"2022-12-20T22:58:12","modified_gmt":"2022-12-20T22:58:12","slug":"net-core-ve-web-api-mvc-validation","status":"publish","type":"post","link":"https:\/\/www.delimuhendis.org\/?p=1171","title":{"rendered":"Net Core ve Web API: MVC Validation"},"content":{"rendered":"\n<p>Merhaba, arkada\u015flar!<\/p>\n\n\n\n<p>\u00d6nceki dersimizde projelerimizde backend validation i\u015flemini incelemi\u015ftik. \u015eimdi ise frontend tarafta ger\u00e7ekle\u015ftirilen MVC validation i\u015flemini g\u00f6rece\u011fiz. Temel olarak MVC validation form submit i\u015flemlerinin bir ViewModel arac\u0131l\u0131\u011f\u0131 ile yap\u0131lmas\u0131 ve modele ba\u011flanan verilerin ona attribute olarak tan\u0131mlanan mvc validasyon kurallar\u0131na uygun olup olmad\u0131\u011f\u0131n\u0131 denetlemek olarak de\u011ferlendirebiliriz.<\/p>\n\n\n\n<p>\u015eimdi \u00f6rne\u011fin bir Login i\u015fleminin validasyonunu Frontend olarak ger\u00e7ekle\u015ftirelim. \u0130lk olarak LoginViewModel ad\u0131nda s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015fturuyoruz ve kurallar\u0131 belirliyoruz. S\u0131n\u0131f\u0131m\u0131z a\u015fa\u011f\u0131daki gibi olmal\u0131. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class LoginViewModel\n{\n    &#91;Required]\n    public string Username { get; set; }\n    &#91;Required]\n    &#91;StringLength(12, ErrorMessage = \"{0} length must be between {2} and {1}.\", MinimumLength = 8)]\n    public string Password { get; set; }\n}<\/code><\/pre>\n\n\n\n<p>Yukar\u0131da Kullan\u0131c\u0131 ad\u0131n\u0131n ve \u015fifrenin zorunlu oldu\u011funu ve \u015fifrenin 8 ile 12 karakter aras\u0131nda olmas\u0131 gerekti\u011fini tan\u0131mlayan bir kod yazd\u0131k. A\u015fa\u011f\u0131da ise login i\u015flemlerinin yap\u0131ld\u0131\u011f\u0131 View dosyas\u0131n\u0131 olu\u015fturuyoruz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@model LoginViewModel\n\n@using (Html.BeginForm(\"Login\", \"Home\", FormMethod.Post))\n{\n    @(Html.TextBoxFor(x=&gt;x.Username, new { @class=\"form-control\", @placeholder=\"Username\"}))&lt;br \/&gt;\n    @(Html.TextBoxFor(x=&gt;x.Password,new {@type= \"password\", @class = \"form-control\", @placeholder = \"Password\" }))&lt;br \/&gt;\n    &lt;button type=\"submit\" class=\"btn btn-info\"&gt;Login&lt;\/button&gt;\n}<\/code><\/pre>\n\n\n\n<p>Son olarak formuzun post edilece\u011fi methodu ve bu view y\u00f6nlendirme kodlar\u0131n\u0131 yazmam\u0131z gerekiyor. Controller s\u0131n\u0131f\u0131na gelip a\u015fa\u011f\u0131daki gibi methodlar\u0131m\u0131z\u0131 ekliyoruz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> public IActionResult Login()\n {\n            return View();\n }\n\n &#91;HttpPost]\n public IActionResult Login(LoginViewModel model)\n {\n      if (ModelState.IsValid)\n      {\n          \/\/ do whatever you want, send to backend for login\n          return View();\n      }\n      return BadRequest(\"Invalid model\");\n  }<\/code><\/pre>\n\n\n\n<p>Yukar\u0131daki ilk methodumuzda kullan\u0131c\u0131 login sayfas\u0131na y\u00f6nlendiriyor. \u0130kinci methodumuz ise login formunun gitti\u011fi action&#8217;d\u0131r. \u0130kinci methodda ModelState.IsValid kodu ile gelen datan\u0131n LoginViewModel s\u0131n\u0131f\u0131 i\u00e7erisinde Attribute&#8217;lerle tan\u0131mlanm\u0131\u015f kurallara uygun olup olmad\u0131\u011f\u0131na bak\u0131l\u0131yor. Uygunsa, i\u015flem yap\u0131l\u0131yor ve uygun de\u011filse, hata d\u00f6nd\u00fcr\u00fcl\u00fcyor.<\/p>\n\n\n\n<p>Bu dersimizde de UI tarafl\u0131 validasyon i\u015flemini g\u00f6rd\u00fck. Gelecek dersimizde g\u00f6r\u00fc\u015fmek \u00fczere.  \u0130yi Kodlamalar!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba, arkada\u015flar! \u00d6nceki dersimizde projelerimizde backend validation i\u015flemini incelemi\u015ftik. \u015eimdi ise frontend tarafta ger\u00e7ekle\u015ftirilen MVC validation i\u015flemini g\u00f6rece\u011fiz. Temel olarak&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":[364,403,414,596],"class_list":["post-1171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","tag-login","tag-mvc","tag-net-core","tag-validation"],"_links":{"self":[{"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1171","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=1171"}],"version-history":[{"count":2,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1171\/revisions"}],"predecessor-version":[{"id":1458,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=\/wp\/v2\/posts\/1171\/revisions\/1458"}],"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=1171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.delimuhendis.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}