﻿
{"id":8295,"date":"2018-06-25T19:28:20","date_gmt":"2018-06-25T19:28:20","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=8295"},"modified":"2018-06-25T21:08:37","modified_gmt":"2018-06-25T21:08:37","slug":"asp-net-mvc-web-api-nedir-nasil-olusturulur","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-web-api-nedir-nasil-olusturulur\/","title":{"rendered":"Asp.NET MVC &#8211; Web Api Nedir? Nas\u0131l Olu\u015fturulur?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>G\u00fcn\u00fcm\u00fcz uygulamalar\u0131 yap\u0131sal olarak kendi b\u00fcnyelerinde bir b\u00fct\u00fcn te\u015fkil etselerde kullan\u0131c\u0131lara daha farkl\u0131 hitap \u015fekilleriyle piyasada fark yaratmaya \u00e7al\u0131\u015fmaktad\u0131rlar ve bu hitap \u015fekilleri yer yer uygulama \u00fczerinde belirli noktalar\u0131 d\u00fcnyaya a\u00e7acak kadar ileri derece fikirlerle zenginle\u015ftirilmektedir. Bu konuya \u00f6rnek olarak d\u00fcnya devlerinden Google&#8217;\u0131 verebiliriz. Google maps \u00f6zelli\u011fini sadece son kullan\u0131c\u0131lara hizmet veren bir navigasyon uygulamas\u0131 olarak tasarlam\u0131\u015f olsayd\u0131 muhtemelen \u00e7oktan bu hizmette olan deste\u011fini sonland\u0131rm\u0131\u015f olacakt\u0131. Bilhassa kullan\u0131c\u0131larada kendi ihtiya\u00e7lar\u0131 do\u011frultusunda maps uygulamas\u0131 \u00fczerinden geli\u015ftirmeler yapabilme olana\u011f\u0131 tan\u0131yarak \u00fcr\u00fcn\u00fcn detayl\u0131 geli\u015fimini d\u00fcnyaya b\u0131rakm\u0131\u015f oldu. Benzer \u015fekilde Facebook&#8217;u ele al\u0131rsak e\u011fer, en basitinden Facebook ile Login uygulamas\u0131 yap\u0131lmas\u0131na m\u00fcsaade ederek, kitlelere hitap eden siteler \u00fczerinde kendi varl\u0131\u011f\u0131n\u0131 hissetirirken biryandan da toplumsal bir n\u00fcfuz sa\u011flam\u0131\u015f oldu.<\/p>\n<p><strong>Peki bu d\u00fcnya devlerine eri\u015fim nas\u0131l sa\u011fland\u0131<\/strong> diye sorarsan\u0131z e\u011fer arada sadece API diye nitelendirilen ve uygulama geli\u015ftiren firma\/\u015fah\u0131s taraf\u0131ndan yap\u0131ya \u00f6zel tasarlanm\u0131\u015f ve belirli veri yahut i\u015flemlere kontroll\u00fc bir \u015fekilde eri\u015fim izni verilmi\u015f yap\u0131lar ortaya kondu.<\/p>\n<p>\u0130nsanlar bu API denen yap\u0131lar arac\u0131l\u0131\u011f\u0131yla uygulama geli\u015ftiricisinin \u00e7izdi\u011fi s\u0131n\u0131rlarda o uygulaman\u0131n belli ba\u015fl\u0131 nimetlerinden faydalanabilir oldu. \u0130\u015fte bu i\u00e7eri\u011fimizde Asp.NET MVC uygulamalar\u0131m\u0131zda istedi\u011fimiz nimetleri di\u011fer insanlarla payla\u015fabilece\u011fimiz API uygulamalar\u0131n\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 teknik boyutta detayl\u0131ca ele alaca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak API&#8217;yi tan\u0131mlayarak i\u015fe ba\u015flayal\u0131m.<\/p>\n<h3>API Nedir?<\/h3>\n<p>API, T\u00fcrk\u00e7e manas\u0131 &#8220;Uygulama Geli\u015ftirme Aray\u00fcz\u00fc&#8221; olan &#8220;Application Programming Interface&#8221; kelimelerinin ba\u015f harflerinden meydana gelen bir s\u00f6zc\u00fckt\u00fcr. API sayesinde yaz\u0131l\u0131m geli\u015ftiricileri, ellerindeki verileri yahut i\u015flevsellikleri istedikleri s\u0131n\u0131rl\u0131l\u0131kta d\u0131\u015f d\u00fcnyayla payla\u015fabilmekte ve bu payla\u015f\u0131m s\u00fcrecinde t\u00fcm kontrolleri ellerinde tutabilmektedirler.<\/p>\n<p>Dolay\u0131s\u0131yla bu payla\u015f\u0131m neticesinde farkl\u0131 uygulamalar yahut platformlar her\u015feyden(dil, platform, alt yap\u0131 vs.) ba\u011f\u0131ms\u0131z bir \u015fekilde verilerden yahut i\u015flevselliklerden istifade edebilir.<\/p>\n<h3>Neden Web API Kullanmal\u0131y\u0131z?<\/h3>\n<p>Son y\u0131llarda internete eri\u015fim olana\u011f\u0131 \u00e7ok farkl\u0131 platformlar taraf\u0131ndan sa\u011fland\u0131\u011f\u0131 i\u00e7in dolay\u0131s\u0131yla kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 sadece web siteleri kar\u015f\u0131layamaz olmu\u015ftur. Bu platformlar bilgisayarlarla birlikte tabletler ve \u00f6zellikle biribirinden farkl\u0131 yetenekler sergileyen mobil telefonlard\u0131r. Haliyle uygulama geli\u015ftiricileri platformdan ba\u011f\u0131ms\u0131z bir \u015fekilde kullan\u0131c\u0131lara ula\u015fabilmek i\u00e7in uygulamadan da ba\u011f\u0131ms\u0131z API geli\u015ftirmeye y\u00f6nelmektedirler. Geli\u015ftirilen bu API&#8217;ler t\u00fcm platform ve uygulamalar\u0131n okuyup, anlamland\u0131rabilece\u011fi XML veya JSON gibi veri tiplerini kullanarak hizmet sunmakta ve bu \u015fekilde t\u00fcm ba\u011f\u0131ml\u0131l\u0131klardan kendilerini ar\u0131nd\u0131rarak geli\u015ftiricilerin ama\u00e7lar\u0131 do\u011frultusunda son kullan\u0131c\u0131lara hizmet verebilmektedirler.<\/p>\n<h3>Asp.NET MVC \u0130le Web API Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>\u015eimdi geldik makalemizin esas konusuna. Asp.NET MVC ile Web API konusunu detayl\u0131ca ele alabilmek i\u00e7in \u00f6ncelikle bo\u015f bir Web API projesini olu\u015ftural\u0131m. Ard\u0131ndan makalemizde \u00f6rneklendirme yapabilmemiz i\u00e7in North Wind veritaban\u0131n\u0131 Entity Framework ile projeye entegre edelim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur..png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur..png\" alt=\"Asp.NET MVC - Web Api Nedir? Nas\u0131l Olu\u015fturulur?\" width=\"262\" height=\"362\" class=\"aligncenter size-full wp-image-8303\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur..png 262w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-217x300.png 217w\" sizes=\"auto, (max-width: 262px) 100vw, 262px\" \/><\/a><\/p>\n<p>Web API konusunda \u00fc\u00e7 farkl\u0131 duruma hakim olmam\u0131z gerekmektedir. Bu durumlar;<\/p>\n<ul>\n<li><em><strong>Route yap\u0131lanmas\u0131<\/strong><\/em>,<\/li>\n<li><em><strong>GET &#8211; POST durumlar\u0131<\/strong><\/em><\/li>\n<li><em><strong>ve yap\u0131lacak i\u015fe g\u00f6re isimlendirme y\u00f6ntemi.<\/strong><\/em><\/li>\n<\/ul>\n<p>\u0130lk olarak <em><strong>Route yap\u0131lanmas\u0131n\u0131<\/strong><\/em> inceleyelim.<\/p>\n<p>&#8220;App_Start&#8221; klas\u00f6r\u00fc alt\u0131ndaki &#8220;WebApiConfig.cs&#8221; dosyas\u0131n\u0131n i\u00e7eri\u011fine g\u00f6z atarsak e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web.Http;\r\n\r\nnamespace WebApiApplication\r\n{\r\n    public static class WebApiConfig\r\n    {\r\n        public static void Register(HttpConfiguration config)\r\n        {\r\n            \/\/ Web API configuration and services\r\n\r\n            \/\/ Web API routes\r\n            config.MapHttpAttributeRoutes();\r\n\r\n            config.Routes.MapHttpRoute(\r\n                name: &quot;DefaultApi&quot;,\r\n                routeTemplate: &quot;api\/{controller}\/{id}&quot;,\r\n                defaults: new { id = RouteParameter.Optional }\r\n            );\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>\u015feklinde bir route tasar\u0131m\u0131 mevcuttur. \u00d6ncelikle Web API&#8217;nin kullanaca\u011f\u0131 route \u015fablonunu olu\u015fturmam\u0131z gerekmektedir. Bizler bu \u00f6rne\u011fimizde; veri getirme, post etme ve bir yandan da g\u00fcncelleme \u00fczerine \u00f6rneklendirme yapaca\u011f\u0131m\u0131zdan dolay\u0131 ona g\u00f6re bir route tasarlayaca\u011f\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            config.Routes.MapHttpRoute(\r\n                name: &quot;DefaultApi&quot;,\r\n                routeTemplate: &quot;api\/{controller}\/{action}\/{id}&quot;,\r\n                defaults: new { id = RouteParameter.Optional }\r\n            );\r\n<\/pre>\n<p>Evet&#8230; Route \u015fablonumuzu haz\u0131rlam\u0131\u015f olduk. \u015eimdi s\u0131ra API&#8217;mizi olu\u015fturmaya geldi.<\/p>\n<p>Tabi bir yandan API&#8217;mizi olu\u015ftururken bir yandan da API s\u0131n\u0131flar\u0131n\u0131n detaylar\u0131ndan bahserek <em><strong>GET &#8211; POST durumlar\u0131n\u0131<\/strong><\/em> inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8220;Personel(Controller).cs&#8221; isminde bir API olu\u015fturmu\u015f olduk. Bir s\u0131n\u0131f\u0131n API olabilmesi i\u00e7in &#8220;ApiController&#8221; s\u0131n\u0131f\u0131ndan t\u00fcremesi gerekti\u011fini anlad\u0131\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcyorum&#8230;<\/p>\n<p>Velhas\u0131l \u015fimdi bu API ile uygulaman\u0131n d\u0131\u015f\u0131na a\u00e7mak istedi\u011fimiz nimetleri tasarlayaca\u011f\u0131m\u0131z metotlar\u0131 olu\u015ftural\u0131m. Tabi burada dikkat edilmesi gereken nokta olu\u015fturulacak ilgili metodun GET&#8217;mi POST&#8217;mu oldu\u011fudur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n        NorthwindEntities db = new NorthwindEntities();\r\n        public IEnumerable&lt;Personeller&gt; GetPersoneller() =&gt; db.Personeller.ToList();\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki metoda bakarsan\u0131z e\u011fer bir GET metodudur. Nereden mi anl\u0131yoruz? Bak\u0131nca g\u00f6r\u00fcl\u00fcyor i\u015fte \ud83d\ude42 Do\u011frusu bizim anlay\u0131p anlamam\u0131z \u015fu durum i\u00e7in \u00e7ok \u00f6nemli de\u011fil. Web API bunun bir GET metodu oldu\u011funu nereden anlayacak? as\u0131l soru bu! Bu sorunun iki cevab\u0131 vard\u0131r. \u00d6ncelikle compiler ilgili metodun ismine bakacakt\u0131r. GET ile mi POST ile mi ba\u015fl\u0131yor. Ona g\u00f6re ilgili metodun GET ya da POST oldu\u011funu anl\u0131yor. Yani buarada &#8220;(Get)Personeller&#8221; metodu GET ile ba\u015flad\u0131\u011f\u0131 i\u00e7in API taraf\u0131ndan GET metodu olarak alg\u0131lanmaktad\u0131r.<\/p>\n<p>E\u011fer ki metot ismi GET ya da POST ile ba\u015flam\u0131yorsa compiler ilgili metodun &#8220;HttpGet&#8221; ya da &#8220;HttpPost&#8221; attributelar\u0131ndan hangisiyle i\u015faretlendi\u011fine bakacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n        NorthwindEntities db = new NorthwindEntities();\r\n        &#x5B;HttpGet]\r\n        public IEnumerable&lt;Personeller&gt; TumPersonelleriGetir() =&gt; db.Personeller.ToList();\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rnekte oldu\u011fu gibi&#8230;<\/p>\n<p>Dolay\u0131s\u0131yla API i\u00e7erisindeki metotlar\u0131 isimlendirirken dikkat etmemiz gerekti\u011fini anlam\u0131\u015f olsa gerek.<\/p>\n<p>Birazdan API metotlar\u0131m\u0131z\u0131 olu\u015fturaca\u011f\u0131z. Lakin her\u015feyden \u00f6nce bize engel te\u015fkil edecek bir olas\u0131 hata durumunu \u00f6ncelikle de\u011ferlendirip konumuza devam etmek istiyorum.<\/p>\n<p>API metotlar\u0131n\u0131 route yap\u0131lanmas\u0131nda oldu\u011fu gibi tetiklemekteyiz. \u00d6rne\u011fin;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n        NorthwindEntities db = new NorthwindEntities();\r\n        \/\/GET Metodu\r\n        public IEnumerable&lt;Personeller&gt; GetPersoneller() =&gt; db.Personeller.ToList();\r\n    }\r\n<\/pre>\n<p>yukar\u0131daki &#8220;GetPersoneller&#8221; isimli metoda talep g\u00f6ndermek i\u00e7in a\u015fa\u011f\u0131daki gibi linki tetiklememiz gerekmektedir.<\/p>\n<blockquote><p><strong>localhost:*****\/api\/personel\/GetPersoneller<\/strong><\/p><\/blockquote>\n<p>Bu \u015fekilde metoda talep g\u00f6nderildi\u011fi vakit a\u015fa\u011f\u0131daki gibi hatayla kar\u015f\u0131la\u015f\u0131lacakt\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1.png\" alt=\"Asp.NET MVC - Web Api Nedir? Nas\u0131l Olu\u015fturulur?\" width=\"1300\" height=\"544\" class=\"aligncenter size-full wp-image-8323\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1.png 1300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1-300x126.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1-768x321.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-1-1024x429.png 1024w\" sizes=\"auto, (max-width: 1300px) 100vw, 1300px\" \/><\/a><br \/>\nBu hatan\u0131n sebebi, veritaban\u0131n\u0131n ilgili tablosunun t\u00fcm \u00f6zelliklerinin d\u0131\u015far\u0131ya a\u00e7\u0131lmas\u0131ndan kaynaklanmaktad\u0131r. Bizler Web API&#8217;ler de l\u00fczumsuz yere t\u00fcm tablo bilgilerimizin eri\u015filebilir olmas\u0131n\u0131 istemeyiz. Haliyle bunu API&#8217;de istememekte. \u0130\u015fte bu y\u00fczden direkt olarak Entity Framework taraf\u0131ndan olu\u015fturulan entity d\u0131\u015far\u0131ya a\u00e7\u0131lmamaktad\u0131r. Yerine istedi\u011fimiz verileri sunaca\u011f\u0131m\u0131z bir entity olu\u015fturarak kontroll\u00fc bir yap\u0131 sunmam\u0131z bu hatadan bizleri kurtaracakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Personel\r\n    {\r\n        public int PersonelId { get; set; }\r\n        public string Adi { get; set; }\r\n        public string Soyadi { get; set; }\r\n        public string Unvan { get; set; }\r\n    }\r\n<\/pre>\n<p>Evet&#8230; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere yukar\u0131da olu\u015fturmu\u015f oldu\u011fum &#8220;Personel&#8221; s\u0131n\u0131f\u0131 ile veritaban\u0131mdaki tablomun d\u0131\u015far\u0131 a\u00e7aca\u011f\u0131m alanlar\u0131n\u0131 temsil etmekteyim. Bu \u015fekilde hem veritaban\u0131mdaki tablomun g\u00fcvenli\u011fini sa\u011flam\u0131\u015f bulunuyorum hem de d\u0131\u015far\u0131ya l\u00fczumsuz alan \u00e7\u0131kartarak olu\u015facak performans kayb\u0131n\u0131 \u00f6nlemi\u015f oluyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n        NorthwindEntities db = new NorthwindEntities();\r\n        \/\/GET Metodu\r\n        public IEnumerable&lt;Personel&gt; GetPersoneller() =&gt; db.Personeller.Select(p =&gt; new Personel\r\n        {\r\n            Adi = p.Adi,\r\n            Soyadi = p.SoyAdi,\r\n            PersonelId = p.PersonelID,\r\n            Unvan = p.Unvan\r\n        }).ToList();\r\n    }\r\n<\/pre>\n<p>Haliyle t\u00fcm metot yap\u0131m\u0131 olu\u015fturdu\u011fum ve d\u0131\u015f d\u00fcnya ile temas kuracak entity tipinde \u015fekillendiriyorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-2.png\" alt=\"Asp.NET MVC - Web Api Nedir? Nas\u0131l Olu\u015fturulur?\" width=\"497\" height=\"624\" class=\"aligncenter size-full wp-image-8325\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-2.png 497w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-2-239x300.png 239w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/a><\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere olas\u0131 hatam\u0131za nas\u0131l \u00e7\u00f6z\u00fcm bulaca\u011f\u0131m\u0131z\u0131 yerinde g\u00f6rm\u00fc\u015f olduk.<\/p>\n<p>Haz\u0131r yeri gelmi\u015fken \u00f6nemli bir hususuda belirtmek istiyorum ki; response neticesinde gelen veriyi JSON olarak g\u00f6rmek isterseniz gelen XML datas\u0131n\u0131 Clear etmeniz yeterli olacakt\u0131r. Bu i\u015flemide <\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class WebApiConfig\r\n    {\r\n        public static void Register(HttpConfiguration config)\r\n        {\r\n            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();\r\n            config.MapHttpAttributeRoutes();\r\n            config.Routes.MapHttpRoute(\r\n                name: &quot;DefaultApi&quot;,\r\n                routeTemplate: &quot;api\/{controller}\/{action}\/{id}&quot;,\r\n                defaults: new { id = RouteParameter.Optional }\r\n            );\r\n\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015feklinde &#8220;WebApiConfig.cs&#8221; dosyas\u0131na &#8220;GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();&#8221; komutunu ekleyerek ger\u00e7ekle\u015ftirebilir ve bundan b\u00f6yle gelecek t\u00fcm sonu\u00e7lar\u0131 JSON veri format\u0131nda elde edebiliriz.<\/p>\n<p>\u015eimdi konumuza devam ederek g\u00f6n\u00fcl rahatl\u0131\u011f\u0131yla API metotlar\u0131m\u0131z\u0131 olu\u015fturabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class PersonelController : ApiController\r\n    {\r\n        NorthwindEntities db = new NorthwindEntities();\r\n        \/\/GET Metodu\r\n        public IEnumerable&lt;Personel&gt; GetPersoneller() =&gt; db.Personeller.Select(p =&gt; new Personel\r\n        {\r\n            Adi = p.Adi,\r\n            Soyadi = p.SoyAdi,\r\n            PersonelId = p.PersonelID,\r\n            Unvan = p.Unvan\r\n        }).ToList();\r\n        \/\/GET Metodu\r\n        &#x5B;HttpGet]\r\n        public Personel PersonelGetir(int id)\r\n        {\r\n            Personeller p1 = db.Personeller.FirstOrDefault(p =&gt; p.PersonelID == id);\r\n            return new Personel\r\n            {\r\n                Adi = p1.Adi,\r\n                Soyadi = p1.SoyAdi,\r\n                PersonelId = p1.PersonelID,\r\n                Unvan = p1.Unvan\r\n            };\r\n        }\r\n        \/\/POST Metodu\r\n        public IHttpActionResult PostPersonel(Personel personel)\r\n        {\r\n            db.Personeller.Add(new Personeller\r\n            {\r\n                Adi = personel.Adi,\r\n                SoyAdi = personel.Soyadi,\r\n                Unvan = personel.Unvan\r\n            });\r\n\r\n            db.SaveChanges();\r\n            return Ok&lt;string&gt;(&quot;Personel kaydedildi...&quot;);\r\n        }\r\n        \/\/PUT Metodu\r\n        public IHttpActionResult PutKategori(int id)\r\n        {\r\n            Kategoriler kategori = db.Kategoriler.FirstOrDefault(k =&gt; k.KategoriID == id);\r\n            kategori.KategoriAdi = &quot; - G\u00fcncel&quot;;\r\n\r\n            db.SaveChanges();\r\n\r\n            return Ok&lt;string&gt;(&quot;Kategori g\u00fcncellenmi\u015ftir...&quot;);\r\n        }\r\n\r\n        \/\/PUT Metodu\r\n        &#x5B;HttpPut]\r\n        public IHttpActionResult KategoriGuncelle(int id)\r\n        {\r\n            Kategoriler kategori = db.Kategoriler.FirstOrDefault(k =&gt; k.KategoriID == id);\r\n            kategori.KategoriAdi = &quot; - G\u00fcncel&quot;;\r\n\r\n            db.SaveChanges();\r\n\r\n            return Ok&lt;string&gt;(&quot;Kategori g\u00fcncellenmi\u015ftir...&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere Web API&#8217;mizi her cins metodu \u00f6rneklendirecek \u015fekilde olu\u015fturmu\u015f olduk. \u015eu ana kadar GET metotlar\u0131n\u0131n link \u00fczerinden basit\u00e7e tetiklendi\u011fini g\u00f6rd\u00fck. Lakin POST metotlar\u0131n\u0131n tetiklenme mekanizmas\u0131 biraz farkl\u0131 oldu\u011fu i\u00e7in bu yaz\u0131m\u0131zda ek bir uygulama kullanarak ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<p>Google amcaya gidip &#8220;PostMan&#8221; yazd\u0131\u011f\u0131n\u0131z vakit kar\u015f\u0131n\u0131za gelen uygulamay\u0131 indirip, y\u00fckleyiniz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-3.png\" alt=\"Asp.NET MVC - Web Api Nedir? Nas\u0131l Olu\u015fturulur?\" width=\"892\" height=\"437\" class=\"aligncenter size-full wp-image-8328\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-3.png 892w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-3-300x147.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2018\/06\/Asp.NET-MVC-Web-Api-Nedir-Nas\u0131l-Olu\u015fturulur.-3-768x376.png 768w\" sizes=\"auto, (max-width: 892px) 100vw, 892px\" \/><\/a><br \/>\nEkran al\u0131nt\u0131s\u0131nda oldu\u011fu \u00fczere POST metotlar\u0131n\u0131 g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi tetikleyebilmekte ve \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 denetlemekteyiz.<\/p>\n<p>Evet arkada\u015flar&#8230; Asp.NET MVC&#8217;de Web API&#8217;lerin nas\u0131l olu\u015fturuldu\u011funu g\u00f6rm\u00fc\u015f olduk. Bu i\u00e7eri\u011fimizde yapm\u0131\u015f oldu\u011fumuz t\u00fcm i\u015flemleri g\u00fcvenlik do\u011frulamas\u0131 yapmaks\u0131z\u0131n ger\u00e7ekle\u015ftirmi\u015f olduk. Dolay\u0131s\u0131yla bir ba\u015fka yaz\u0131m\u0131zda bu i\u00e7eri\u011fimizin devam\u0131 niteli\u011finde Token Authentication ile Web API \u00fczerine isti\u015fare ediyor olaca\u011f\u0131z.<\/p>\n<p>O halde sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere diyelim&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, G\u00fcn\u00fcm\u00fcz uygulamalar\u0131 yap\u0131sal olarak kendi b\u00fcnyelerinde bir b\u00fct\u00fcn te\u015fkil etselerde kullan\u0131c\u0131lara daha farkl\u0131 hitap \u015fekilleriyle piyasada fark yaratmaya \u00e7al\u0131\u015fmaktad\u0131rlar ve bu hitap \u015fekilleri yer yer uygulama \u00fczerinde belirli noktalar\u0131 d\u00fcnyaya a\u00e7acak kadar ileri&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":8329,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,2402],"tags":[2400,2403,2401,2398,2397,2399],"class_list":["post-8295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-mvc","category-web-api","tag-api-nedir","tag-apicontroller","tag-application-programming-interface","tag-asp-net-mvc-web-api","tag-asp-net-web-api","tag-web-api"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=8295"}],"version-history":[{"count":31,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8295\/revisions"}],"predecessor-version":[{"id":8332,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/8295\/revisions\/8332"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/8329"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=8295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=8295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=8295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}