{"id":33522,"date":"2013-07-03T09:30:00","date_gmt":"2013-07-03T06:30:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33522"},"modified":"2021-06-18T09:20:53","modified_gmt":"2021-06-18T06:20:53","slug":"owin-statik-dosyalarin-sunulmasi","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/","title":{"rendered":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131"},"content":{"rendered":"<div class=\"wp-block-image\"><figure class=\"alignleft\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/File-Server.png\" alt=\"File-Server\"\/><\/figure><\/div>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar ki makalelerimde OWIN katmanlar\u0131n\u0131 kullanarak nas\u0131l dinamik web uygulamalar\u0131 geli\u015ftirebilece\u011fimizi sizlerle payla\u015ft\u0131m; ama ger\u00e7ek hayatta web uygulamalar\u0131n\u0131n dinamik i\u00e7erik kadar statik i\u00e7eri\u011fe de sahip oldu\u011funu unutmamal\u0131y\u0131z. Bu makalemde sizlere Katana k\u00fct\u00fcphanelerini kullanarak statik kaynaklar\u0131 nas\u0131l sunabilece\u011finizi payla\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Asl\u0131na bakarsan\u0131z statik i\u00e7eri\u011fi sunabilmek ad\u0131na Katana k\u00fct\u00fcphanelerine ihtiyac\u0131m\u0131z yok. Bu i\u015fi kendi yazaca\u011f\u0131m\u0131z katmanlarla da yapabilmemiz pek tabi ki m\u00fcmk\u00fcn. Di\u011fer yandan bu i\u015f i\u00e7in haz\u0131r k\u00fct\u00fcphaneleri kullanarak Amerika\u2019y\u0131 yeniden ke\u015ffetmemi\u015f oluruz\u2026<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar ki makalelerden tahmin edebilece\u011fiz gibi statik dosyalar\u0131 sunmak i\u00e7in de atmam\u0131z gereken \u00e7ok fazla ad\u0131m bulunmuyor. Bunu i\u00e7in ilgili OWIN kataman\u0131n\u0131 kullan\u0131p statik dosyalara ait baz\u0131 yap\u0131land\u0131rma i\u015flemlerini takip etmemiz yeterli. \u0130\u015fe her zaman oldu\u011fu gibi ilgili NuGet paketini kurmakla ba\u015fl\u0131yoruz. Bu sefer gerekli olan paket <strong><a href=\"http:\/\/nuget.org\/packages\/Microsoft.Owin.StaticFiles\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft.Owin.StaticFiles<\/a><\/strong>. Bu makaleyi yazarken paket&nbsp; 0.20-alpha-20220-88 s\u00fcr\u00fcm numaras\u0131nda oldu\u011fu i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde paketi kurmal\u0131y\u0131z;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"msdos\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Install-Package Microsoft.Owin.StaticFiles -Version 0.20-alpha-20220-88 -Pre<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u0130lerleyen zamanlarda paket s\u00fcr\u00fcm\u00fcn\u00fcn g\u00fcncellenmesi bu konutu ge\u00e7ersiz k\u0131labilir; g\u00fcncel hali i\u00e7in paket sayfas\u0131n\u0131 takip etmenizi \u00f6neririm.<\/p>\n\n\n\n<p>&nbsp; S\u0131f\u0131rdan ba\u015flamak yerine makalemin devam\u0131nda \u201c<a href=\"\/en\/?p=11917\">Kendi Uygulamam\u0131zda OWIN<\/a>\u201d ba\u015fl\u0131kl\u0131 makalemde detaylar\u0131n\u0131 payla\u015ft\u0131\u011f\u0131m \u00f6rnek konsol uygulamas\u0131 \u00fczerinden gidece\u011fim. Bu sebeple hen\u00fcz okumad\u0131ysan\u0131z, <a href=\"\/en\/?p=11917\">bu makaleme<\/a> h\u0131zl\u0131ca g\u00f6z atman\u0131z\u0131 \u00f6neririm.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Projemize Microsoft.Owin.StaticFiles NuGet paketini kurduktan sonra tek yapmam\u0131z gereken asl\u0131nda yap\u0131land\u0131rma s\u0131ras\u0131nda hangi url\u2019nin hangi klas\u00f6rle e\u015fle\u015fti\u011fi bilgisini vermek olacak. Geri kalan\u0131 zaten OWIN katman\u0131 kendisi hallediyor. Yap\u0131land\u0131rma i\u00e7in <strong>Startup <\/strong>s\u0131nf\u0131 i\u00e7erisindeki <strong>Configuration<\/strong> fonksiyonumuzun i\u00e7eri\u011fi a\u015fa\u011f\u0131daki \u015fekilde olmal\u0131;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using Owin;\n\nnamespace Enterprisecoding.OWINKonsolUygulamasi {\n    internal class Startup {\n        public void Configuration(IAppBuilder app) {\n            app.UseFileServer(options => options.WithRequestPath(\"\/Dosyalarim\")\n                                                .WithPhysicalPath(\"StatikIcerik\")\n                                                .WithDirectoryBrowsing());\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Burada <strong>UseFileServer<\/strong> geni\u015fletme metodu t\u00fcm yap\u0131land\u0131rma i\u015fini yapmam\u0131za olanak sunmakta. Yukar\u0131daki \u00f6rnek i\u00e7in; <strong>\/Dosyalarim<\/strong> adresine gelen t\u00fcm isteklerde uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 klas\u00f6rde yer alan <strong>StatikIcerik<\/strong> klas\u00f6r\u00fc i\u00e7erisindeki dosyalar sunulmakta. <strong>WithDirectoryBrowsing<\/strong> fonksiyon \u00e7a\u011fr\u0131s\u0131 dizinin dola\u015f\u0131labilmesine izin verildi\u011fini belirtmekte. Bu basit kodlama ard\u0131ndan konsol uygulamam\u0131z\u0131 ba\u015flatarak bir taray\u0131c\u0131dan <a href=\"http:\/\/localhost:8080\/Dosyalarim\">http:\/\/localhost:8080\/Dosyalarim<\/a> adresine gitti\u011finizde a\u015fa\u011f\u0131dakine benzer bir \u00e7\u0131kt\u0131 ile kar\u015f\u0131la\u015facaks\u0131n\u0131z;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/Statik-Dosyalarim-Klasoru.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/Statik-Dosyalarim-Klasoru_thumb.png\" alt=\"Statik sunulan dosyalar\u0131m klas\u00f6r\u00fc\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde de g\u00f6rebilece\u011finiz gibi projem i\u00e7erisinde StaticIcerik ad\u0131 alt\u0131nda bir klas\u00f6r olu\u015fturup alt\u0131nda OrnekDosya.txt ad\u0131yla bir dosya olu\u015fturdum. \u00d6zellikler penceresinden her derlemede bu dosyan\u0131n \u00e7\u0131kt\u0131 klas\u00f6r\u00fcne kopyalanmas\u0131 i\u00e7in ayarlama yapt\u0131m. Bu sayede yukar\u0131daki linke t\u0131klad\u0131\u011f\u0131mda ek bir i\u015flem yapmama gerek kalmaks\u0131z\u0131n dosya sunulmakta;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/Static-Dosya-Icerigi.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/Static-Dosya-Icerigi_thumb.png\" alt=\"Sunulan statik dosya i\u00e7eri\u011fi\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; \u0130lk resimde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi kullan\u0131c\u0131lar\u0131n klas\u00f6r i\u00e7erisinde dola\u015fmas\u0131na izin vermek istemiyorsan\u0131z tek yapman\u0131z gereken kod i\u00e7erisinden <strong>WithDirectoryBrowsing<\/strong> fonksiyon \u00e7a\u011fr\u0131s\u0131n\u0131 kald\u0131rmak olacak.<\/p>\n\n\n\n<p>&nbsp;&nbsp; E\u011fer verdi\u011finiz klas\u00f6rde bir dosya ad\u0131 verilmedi\u011finde a\u00e7\u0131lacak varsay\u0131lan dok\u00fcmanlar\u0131 belirtmek isterseniz <strong>WithDefaultFileNames<\/strong> fonksiyonunu kullanabilirsiniz. String dizisi kabul eden bu fonksiyona ge\u00e7ilen parametreye denk gelen bir dosyan\u0131n klas\u00f6r i\u00e7erisinde bulunmas\u0131 durumunda klas\u00f6r listesi yerine bu dosya sunulacakt\u0131r. Varsay\u0131lan olarak <em>index.html<\/em>\u2019in kabul edildi\u011fi bu liste eklenme s\u0131ras\u0131na g\u00f6re i\u015flem g\u00f6recektir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u015eapkan\u0131n Alt\u0131<\/h2>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da \u00f6rneklemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131m i\u015flemler asl\u0131nda neredeyse her sunucunun varsay\u0131lan olarak desteklemesi gerekti\u011fini d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm i\u015flemler. Asl\u0131na bakarsan\u0131z <a href=\"http:\/\/owin.org\" target=\"_blank\" rel=\"noopener noreferrer\">owin.org<\/a> sitesinde bu i\u015flemler i\u00e7in tan\u0131mlanm\u0131\u015f bir ek standart mevcut durumda; <strong>OWIN SendFile Extension<\/strong>. Bu makaleyi kaleme ald\u0131\u011f\u0131m s\u0131rada <a href=\"http:\/\/owin.org\/extensions\/owin-SendFile-Extension-v0.3.0.htm\" target=\"_blank\" rel=\"noopener noreferrer\">0.3.0 s\u00fcr\u00fcm\u00fc yay\u0131nda<\/a> olan bu geni\u015fleme standard\u0131 ayn\u0131 OWIN gibi olabildi\u011fine sade. Standart bir grup \u00f6zellikle ve a\u015fa\u011f\u0131daki \u015fekilde bir delegate tan\u0131m\u0131ndan olu\u015fmakta;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using SendFileFunc =\n        Func\n        &lt;\n            string, \/\/ Dosya ad\u0131 ve yolu\n            long, \/\/ Ba\u015flang\u0131\u00e7 dosya offset'i\n            long?, \/\/ okunacak Byte miktar\u0131, dosyan\u0131n kalan\u0131 i\u00e7in null\n            CancellationToken, \/\/ \u0130ptal\n            Task \/\/ Tamamlama\n        >;<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Herhangi bir sebeple istemciye statik dosya g\u00f6ndermek isteyen bir katman \u00f6zellikler aras\u0131ndan <strong>sendfile.SendAsync<\/strong> anahtar\u0131 ile sunucu taraf\u0131ndan sunulan yukar\u0131daki fonksiyonu kullanabilir. Bu \u015fekilde olabildi\u011fine ba\u011f\u0131ms\u0131z \u015fekilde katmanlar\u0131n statik dosya g\u00f6nderebilmesi sa\u011flanm\u0131\u015ft\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdi bu noktada akl\u0131n\u0131z biraz kar\u0131\u015fm\u0131\u015f olabilir; sonu\u00e7ta makalemin ilk b\u00f6l\u00fcm\u00fcnde bu bilgilerle \u00f6rt\u00fc\u015fen bir kodlama s\u00f6z konusu de\u011fildi. Asl\u0131na bakarsan\u0131z bu kodlama biraz daha soyutlanm\u0131\u015f durumdayd\u0131.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu bak\u0131\u015f a\u00e7\u0131s\u0131yla s\u0131f\u0131rdan; dosya g\u00f6nderme i\u015flemini yapan basit bir katmana \u00f6rnek vereyim. Kolay anla\u015f\u0131labilmesi ad\u0131na basit bir senaryo \u00fczerinden gidece\u011fim; amac\u0131m\u0131z di\u011fer katmanlarca i\u015flenmeyen herhangi bir istek i\u00e7in her zaman sabit bir dosya i\u00e7eri\u011fini istemciye g\u00f6ndermek. Asl\u0131na bakarsan\u0131z bu senaryo <em>404 sayfa bulunamad\u0131<\/em> senaryosu \ud83d\ude09<\/p>\n\n\n\n<p>&nbsp;&nbsp; Projeme, senaryom gere\u011fi d\u00f6nece\u011fim i\u00e7eri\u011fi tutaca\u011f\u0131m yeni bir dosya ekledim. <em>VarsayilanIcerik.txt<\/em> ad\u0131n\u0131 verdi\u011fim bu dosyama ise a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyip \u00f6zelliklerinden her derlemede \u00e7\u0131kt\u0131 klas\u00f6r\u00fcne kopyalanmas\u0131n\u0131 sa\u011flad\u0131m;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"Bu sayfa ba\u015fka her hangi bir katman iste\u011fi yan\u0131tlamad\u0131\u011f\u0131 zaman g\u00f6nderilecektir.\u201d<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Devam\u0131nda bu i\u00e7eri\u011fi sunacak olan <strong>SabitDosyaIcerigi<\/strong> ad\u0131yla yeni bir OWIN katman\u0131 olu\u015fturdum;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Enterprisecoding.OWINKonsolUygulamasi {\n    using AppFunc = Func&lt;IDictionary&lt;string, object>, Task>;\n    using SendFileFunc = Func&lt;string, long, long?, CancellationToken, Task>;\n\n    public class SabitDosyaIcerigi {\n        private AppFunc birSonrakiKatman;\n        private readonly string dosya;\n\n        public SabitDosyaIcerigi(AppFunc birSonrakiKatman, string dosya) {\n            this.birSonrakiKatman = birSonrakiKatman;\n            this.dosya = dosya;\n        }\n\n        public Task Invoke(IDictionary&lt;string, object> environment) {\n            var sendFile = (SendFileFunc)environment[\"sendfile.SendAsync\"];\n            return sendFile(dosya, 0, null, (CancellationToken)environment[\"owin.CallCancelled\"]);\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp; Ekledi\u011fim bu yeni katman g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi olabildi\u011fine basit, hatta i\u00e7erisinde sunucunun <strong>SendFile<\/strong> deste\u011fi olup olmad\u0131\u011f\u0131na dair bile bir kontrol mevcut de\u011fil. Ger\u00e7ek bir katman da daha fazla kontrol olacakt\u0131r. Ortam s\u00f6zl\u00fc\u011f\u00fcnden ald\u0131\u011f\u0131m\u0131z <strong>SendAsync<\/strong> delegate\u2019ini kullanarak en yal\u0131n haliyle constructer\u2019\u0131nda verilen sabit bir dosya i\u00e7eri\u011fini istemciye d\u00f6nmekte. Bu OWIN katman\u0131n\u0131 az \u00f6nceki \u00f6rne\u011fimiz i\u00e7erisine eklemek i\u00e7in <em>Configuration<\/em> fonksiyonumuzu a\u015fa\u011f\u0131daki \u015fekilde g\u00fcncellememiz gerekecektir;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System.IO;\nusing Owin;\n\nnamespace Enterprisecoding.OWINKonsolUygulamasi {\n    internal class Startup {\n        public void Configuration(IAppBuilder app) {\n            app.UseFileServer(options => options.WithRequestPath(\"\/Dosyalarim\")\n                                                .WithPhysicalPath(\"StatikIcerik\")\n                                                .WithDirectoryBrowsing());\n\n            var referansKonum = Path.GetDirectoryName(GetType().Assembly.Location);\n\n            app.Use(typeof(SabitDosyaIcerigi), Path.Combine(referansKonum, @\"StatikIcerik\\VarsayilanIcerik.txt\"));\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu i\u015flem ard\u0131nda, ek bir \u015fey yapmaya gerek kalmaks\u0131z\u0131n istemci taraf\u0131ndan yap\u0131lan istekler kar\u015f\u0131lanmazsa <strong>SabitDosyaIcerigi<\/strong> katman\u0131m\u0131z devreye girecek ve belirledi\u011fimiz dosya i\u00e7eri\u011fi istemciye g\u00f6nderilecektir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/OWIN-OlmayanBirDosya.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2013\/06\/OWIN-OlmayanBirDosya_thumb.png\" alt=\"Hi\u00e7 bir katman taraf\u0131ndan kar\u015f\u0131lanmam\u0131\u015f bir istek oldu\u011funda varsay\u0131lan dosya i\u00e7eri\u011fi d\u00f6necektir\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Burada dikkat edilmesi gereken bir nokta <strong>SendFile<\/strong> deste\u011finin sunucu olarak kulland\u0131\u011f\u0131m\u0131z <strong>Microsoft.Owin.Host.HttpListener <\/strong> i\u00e7erisinde olmad\u0131\u011f\u0131d\u0131r! Bu destek asl\u0131nda <strong>Microsoft.Owin.StaticFiles<\/strong> paketi i\u00e7erisinde yer alan <strong>SendFileMiddleware<\/strong> ile birlikte gelmekte\u2026<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; \u015eimdiye kadar ki makalelerimde OWIN katmanlar\u0131n\u0131 kullanarak nas\u0131l dinamik web uygulamalar\u0131 geli\u015ftirebilece\u011fimizi sizlerle payla\u015ft\u0131m; ama ger\u00e7ek hayatta web uygulamalar\u0131n\u0131n dinamik i\u00e7erik kadar statik i\u00e7eri\u011fe de sahip oldu\u011funu unutmamal\u0131y\u0131z. Bu makalemde sizlere Katana k\u00fct\u00fcphanelerini kullanarak statik kaynaklar\u0131 nas\u0131l sunabilece\u011finizi payla\u015faca\u011f\u0131m. &nbsp;&nbsp; Asl\u0131na bakarsan\u0131z statik i\u00e7eri\u011fi sunabilmek ad\u0131na Katana k\u00fct\u00fcphanelerine ihtiyac\u0131m\u0131z yok. Bu i\u015fi kendi yazaca\u011f\u0131m\u0131z&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":33523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[316,317],"class_list":["post-33522","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-katana","tag-owin"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; \u015eimdiye kadar ki makalelerimde OWIN katmanlar\u0131n\u0131 kullanarak nas\u0131l dinamik web uygulamalar\u0131 geli\u015ftirebilece\u011fimizi sizlerle payla\u015ft\u0131m; ama ger\u00e7ek hayatta web uygulamalar\u0131n\u0131n dinamik i\u00e7erik kadar statik i\u00e7eri\u011fe de sahip oldu\u011funu unutmamal\u0131y\u0131z. Bu makalemde sizlere Katana k\u00fct\u00fcphanelerini kullanarak statik kaynaklar\u0131 nas\u0131l sunabilece\u011finizi payla\u015faca\u011f\u0131m. &nbsp;&nbsp; Asl\u0131na bakarsan\u0131z statik i\u00e7eri\u011fi sunabilmek ad\u0131na Katana k\u00fct\u00fcphanelerine ihtiyac\u0131m\u0131z yok. Bu i\u015fi kendi yazaca\u011f\u0131m\u0131z...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2013-07-03T06:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-18T06:20:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"1201\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131\",\"datePublished\":\"2013-07-03T06:30:00+00:00\",\"dateModified\":\"2021-06-18T06:20:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/\"},\"wordCount\":1099,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg\",\"keywords\":[\"Katana\",\"Owin\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/\",\"url\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/\",\"name\":\"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg\",\"datePublished\":\"2013-07-03T06:30:00+00:00\",\"dateModified\":\"2021-06-18T06:20:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg\",\"width\":1800,\"height\":1201},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy","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:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/","og_locale":"en_US","og_type":"article","og_title":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy","og_description":"&nbsp;&nbsp; \u015eimdiye kadar ki makalelerimde OWIN katmanlar\u0131n\u0131 kullanarak nas\u0131l dinamik web uygulamalar\u0131 geli\u015ftirebilece\u011fimizi sizlerle payla\u015ft\u0131m; ama ger\u00e7ek hayatta web uygulamalar\u0131n\u0131n dinamik i\u00e7erik kadar statik i\u00e7eri\u011fe de sahip oldu\u011funu unutmamal\u0131y\u0131z. Bu makalemde sizlere Katana k\u00fct\u00fcphanelerini kullanarak statik kaynaklar\u0131 nas\u0131l sunabilece\u011finizi payla\u015faca\u011f\u0131m. &nbsp;&nbsp; Asl\u0131na bakarsan\u0131z statik i\u00e7eri\u011fi sunabilmek ad\u0131na Katana k\u00fct\u00fcphanelerine ihtiyac\u0131m\u0131z yok. Bu i\u015fi kendi yazaca\u011f\u0131m\u0131z...Read More","og_url":"https:\/\/fatihboy.com\/en\/owin-statik-dosyalarin-sunulmasi\/","og_site_name":"Fatih Boy","article_published_time":"2013-07-03T06:30:00+00:00","article_modified_time":"2021-06-18T06:20:53+00:00","og_image":[{"width":1800,"height":1201,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131","datePublished":"2013-07-03T06:30:00+00:00","dateModified":"2021-06-18T06:20:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/"},"wordCount":1099,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg","keywords":["Katana","Owin"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/","url":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/","name":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131 - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg","datePublished":"2013-07-03T06:30:00+00:00","dateModified":"2021-06-18T06:20:53+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/website-content.jpg","width":1800,"height":1201},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/owin-statik-dosyalarin-sunulmasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"OWIN; Statik Dosyalar\u0131n Sunulmas\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=33522"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33522\/revisions"}],"predecessor-version":[{"id":33524,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33522\/revisions\/33524"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/33523"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}