ASP.NET vNext WebApplication ile Yeni Özellikler

Selamlar;

Çok yakın zamanda Microsoft çoklu platformda çalışabilecek, açık kaynak kodlu, mobil ve cloud çalışma tabanlı yeni ürünü Asp.Net vNext ürününü duyurdu. Doğruyu söylemek gerekir ise 2014’ün son ayına girdiğimiz bu günlerde  Microsoft için gerçekten de heycan verici bir yıl sonu oluyor. Artık açık kaynak kodu ile, birçok developer’ın ilgisini üstüne çekeceği aşikar. Bu makalemde ASP.NET vNext ve Visual Studio 14 CTP3 ile yeni gelen daha önce değinmediğim ilginizi çekebilecek farklı özellikleri tanıtacağım.

Öncelikle ASP.NET vNext Web Application projesini aşağıda görüldüğü gibi yaratıyoruz.

vNext1

vNextFutures adında yarattığım projede dikkatimi çeken ilk şey Solution Explorer ve proje yapısı oluyor. Aşağıda görüldüğü gibi web.config veya Global.asax dosyaları yok. Bunu yerine config.json, project.json ve startup.cs dosyaları var. Hepsini tek tek inceleyeceğiz.

vNext2

Config.json:

Startup.cs : Configure() function içermektedir.Http pipeline ayarları burdan yapılır. Routing işlemleri gene burdan ayarlanır. Konfigurasyon ayarları yukarıda ki gibi Config.json ile tanımlanır. Mesela yukarıda default connection string belirlenmiştir. Ayrıca kullanılacak servisler gene startup.cs’de tanımlanır. İstenirse aşağıda görüldüğü gibi SqlServer bırakılıp memory storage’a geçilebilir.

 // Set up application services
app.UseServices(services =>
{
// Add EF services to the services container
services.AddEntityFramework()
.AddInMemoryStore();
//.AddSqlServer();

MVC Service ve Identity Service’de Startup.cs’den ayarlanmaktadır.

Startup.cs:

 Project.json: project.json’da görülen aşağıdaki liste aynı Nuget’de olduğu gibi uygulamamıza dependency olan kütüpahanelerin versiyon numaraları ile gözüken listesidir.

list

  •  Bu sadece sıradan bir text dosya değildir. Yukarıda görüldüğü gibi listede görülen tüm dependency dosyalar projemizin referance dosyasında aynen gözükmektedir.
  • Artık referance’ı sağ tıklayıp istenen dll’i ekleme devri bitmiştir. İlgili ekran görüntüsü aşağıdadır.

vNext4

  • Istenen paket uygulamamıza referance edilmesi işlemi project.json dosyası üzerinden dependencies altına eklenerek yapılmaktadır. Tanımlanan dosyalar Referance altına da otomatik olarak eklenmektedir. Gene project.json dosyası üzerinden kaldırılan dependencyler Referance dosyası üzerinden’de otomatik kalkmaktadır. Aşağıda projemize EntityFramework.SqlServer paketini ekleyip çıkararak solutiondaki referance  altında olan değişiklikleri gözlemlemekteyiz.

kproj

.kproj:Visual Studio’da yeni bir proje yarattığımızda, yukarıda görüldüğü gibi .kproj uzantlı bir dosya, root project’de oluşur. Bu alışık olmadığımız file oluşturduğumuz application’ın Visual Studio tarafından yüklenip çalıştırılması için gerekli ayarları barındırır.

 vNextFutures.kproj:

 Dynamic Code Compilation [Roslyn Compiler]: 

ASP.NET’in kullandığı 2 tip derleme yöntemi vardır. Biri projenin derlenmesi(.csproj/.vbproj) ve biri de çalışma zamanı yani Runtime derleme (uygulama çalışırken). vNext ile başlarsak, şimdi elimizde Roslyn compiler var. Roslyn’in en önemli özelliği dinamic derleme yapabilmesidir. Kısaca uygulamada değişiklik yapılınca tekrardan derlemeye gerek yoktur. Bu zamana kadar Visual Studio’da code tarafında değişiklik yapınca , Ctrl+Shift+B’ye basarak ve sayfayı refresh ederek yapılan değişiklikler görülebiliyordu. Artık  Roslyn ile code tarafında değişklik yapılınca uygulama yeniden derlenmeden sadece F5 ile browser yenilerek dinamic derleme ile ilgili değişiklikler görülebilir.

Aşağıda bunla ilgi örneği görebilirsiniz. HomeController’da About sayfasındaki mesaj çalışma zamanında değiştirilince tekrardan derlemeden ilgili değişiklik yansıtılır. Uygulama Ctrl + F5 ile çalıştırılınca Aşağıdaki ekran görüntüsü alınır.

second

About action alttaki gibi değiştirilip derlenmeden sadece save edilip sayfanın F5 ile yenilenmesi ile alttaki sonuç elde edilir.

first

 ASP.NET vNext ile Self-hosting :  Şimdi sıra geldi benim en favori yeniliklerden biri olarak gördüğüm kendi kendine host etme özelliğine. Bu zamana kadar Web API 2 ve SignalR 2 kendi kendine host edebiliyordu. Şimdi bu örneğimizde vNext ile command prompt dan uygulamamızı host edicez. Öncelikle K Version Manager (KVM)’nin kullanılması için alttaki komutun command prompt’dan yazılarak çalıştırılıp kvm local makinaya install edilmelidir.

@powershell -NoProfile -ExecutionPolicy unrestricted -Command “iex ((new-object net.webclient).DownloadString(‘https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.ps1’))”

Command Prompt’da yazacağımız ilk komut “kvm list” dir. Bize local makinamızdaki  .NET Frameworkleri listeler. Mesela bende aşağıda gördüğünüz gibi 4 tane vardır.

kvm1

Ben default’ı kullanacağım. Bu nedenle “kvm use default” komutunu yazdım.

kvm2

Şimdi en güzel kısma geldik. IIS olmadan yayın yapmaya. “k web”  komutu HTTP listener’ı projeyi derlemeye gerek olmadan yayımlar. Ayrıca “k web” komutu main için Microsoft.AspNet.Hosting API’ye bakmasını sağlar ve uygulamayı host url’de yayınlar . “k web” komutu vNextFutures uygulamamızda project.json dosyasında aşağıda görüldüğü gibi zaten default tanımlıdır. Kodda da görüldüğü gibi port olarak :5000‘i kullanmaktadır.

Komut aşağıda görüldüğü gibi çalıştırılır.

kvm3

kvm4

Sonuç yukarıda görüldüğü gibidir. Ve en muhteşemi status bar’a bakıldığında IIS Express running yazısı görülmemektedir. Bu sizce de mükemmel değil mi:)

Yayını durdurmak için “k stop” komutu yazılır.

ASP.NET MVC 6.0  Yenilik ve Değişiklikleri:

ASP.NET vNext; MVC, Web API, ve Web Pages frameworkleri birleşti ve MVC 6 dediğimiz tek bir framework oldu.

  • Aşağıda görüldüğü gibi startup.cs’de tanımlanan servislerde AddMvc() methodu ile servislere Mvc’de eklenmektedir. Bu satır kaldırıldığı takdirde 500 internal server error hatası alınır.

app.UseServices(services =>

    {

        // Add MVC services to the services container

        services.AddMvc();

    });

  • Startup.cs’i inceler isek  aşağıda görüldüğü gibi MVC 6’da template yapısının geldiği görülebilir.
  • Gene aşağıda görüldüğü gibi UrlParameter.Optional kaldırılmış ve bunu yerine gelmiştir. Ve id? ile birlikte id parametresinin optional olduğu belirtilmiştir.

template: “{controller}/{action}/{id?}”

  •  View’da aşağıdaki modeli tanıtalım

    Daha sonra da view içinde ilgili codeLanguage modelini aşağıdaki gibi çağıralım.

    Sonuç Ekranı aşağıdaki gibidir.

result

  • Aynı işlemi controller tarafından’da yapabiliriz. Öncelikle aşağıdaki class yaratılır.

Daha sonra ilgili view’a model controller’ın action’ında aşağıdaki gibi gönderilir.

View tarafında model aşağıdaki gibi çağrılır. Sonuç önceki ile aynıdır.

  •  ASP.NET MVC 6’da Controller’ı yaratmak için illaki Microsoft.AspNet.Mvc.Controller base classından türetilmesine gerek yoktur. Aşağıda görüldüğü gibi de Clr class veya Poco yazılabilir. Aşağıda [Activate] çok önemli bir attribute’dür. ASP.Net runtime da controller’a çeşitli servisleri inject etmek için kullanılır. HomeController’ı flat olarak yani hiçbir class’dan inherit almadan yaratılmıştır. ViewDataDictionary ile de ilgili model view’a göderilmiştir.

  • ASP.NET MVC 6 ve vNext üzerinde çalışılan çok dallı ve büyük projelerde herbiri için folder açıp, kendisine özel yerler belirleme işlemini Areas denen yeni attribute ile yapabilmekteyiz. Burda amaç dağıtık mimariyi en iyi şekilde uygulayabilmektir.Area özlliği, Mvc 6’da controller’ın başına [Area] attribute konarak ve ayrıca route template de {area} parametresi tanımlanarak kullanılırlar. Aşağıda öncelikle custom bir rout yazılmıştır. Bu CustomRoute, CustomArea altındaki Index.cshtml dosyasına yönlendirir. Doğal olarak dosyanın yolu Areas/CustomArea/Views/Home/ Index.cshtml dosyasıdır. Route tanımlama kısmına dikkat edilirse, area tanımlamasını ve optional id parametresinin kullanım şekli yandaki gibi görülmektedir. {area}/{controller}/{action}/{id?

Startup.cs’deki route tanımlarına yukarıda tanımlanan CustomRoute’u aşağıda görüldüğü gibi eklenir.

Aşağıda görüldüğü gibi HomeController’ın başına [Area(“CustomArea”)] attribute konarak Areas/CustomArea/Views/Home/ altındaki dosyalara erişileceği belirtilmiştir.

Geldik bir makalenin daha sonuna. Bu makalede ASP.NET vNext ile gelen yeniliklerin bir kısmına deyinebildik. Anlatılacak daha birçok yenilik var. İlerleyen makalelerde onlardan da bahsedeceğim.

Yeni bir makalede görüşmek üzere hoşçakalın.

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

16 Cevaplar

  1. veli dedi ki:

    Hocam elinize saglik.
    Cok detayli ve anlasilir bir makale olmus.
    vNext de bu denli yenilik oldugunu bu makaleye kadar bilmiyordum. Devamini merakla bekliyorum hocam. Hoscakalin.

  2. Omer dedi ki:

    Selamlar Hocam;
    Gene harika bir makale olmuş. Bu konuda türkçe kaynak olarak daha iyisi yok.
    Özellikle self hosting muhteşem. Üstüne üstük yayınlanacak port’u projet.json’dan ayarlayabilmek muhteşem. No More IIS. Ayrıca Dynamic Code Compilation muhteşem hocam.
    Elinize sağlık.

  3. murat dedi ki:

    Selamlar Hocam;
    Öncelikle çok faydalı bir makale olmuş. Gerçekten çok başarılı.Teşekkürler..
    Video ile anlatılan konuları desteklemeniz bence çok güzel. Hem içerik hakkında fikrimiz oluyor. Hem de konunun anlaşılmasında büyük yarar sağlıyor. Ellerinize sağlık. Tüm makalelerinizi canı gönülden takip ediyorum. Sağlıcakla kalın.

    • borsoft dedi ki:

      Teşekkürler Murat. Anlatılan konuların görsel örnekler ile güzel desteklendiğini düşünüyorum. İlerde belli konular üzerinde tartışma videolarıda çekmeyi planlıyorum.

  4. duygu dedi ki:

    İyi akşamlar hocam;
    Bencede bu konu ile ilgili okuduğum engüzel makale bu. Sadece türkçe kaynaklarda değil yabancı kaynaklar içinde de en iyisi bu. Detaylı ve titiz bir çalışma. Elinize sağlık. Sizin bloğunuzu keşfetmem büyük bir şans. Çok teşekkürler hocam.

  5. Burak dedi ki:

    Selamlar Hocam;
    Asp.Net vNext Yeni Özellikler şeklinde bir arama yapınca çıkan yazılar ile sizin yazınızı karşılaştırınca ne kadar komik kalıyorlar anlatamam. Öncelikle bu konuya bu denli detaylı girdiğiniz için teşekkür ederim. Gerçekten çok güzel bir yazı olmuş. Genelde pek yorum yazmam ama bloğunuz gerçekten bir hazine.
    İyi çalışmalar.

  6. HastaneBul dedi ki:

    Bilgilendirici bir makale olmuş, emeğinize sağlık.

  7. Hakan dedi ki:

    Hocam selamlar,
    Her zamanki gibi çok faydalı bir makale olmuş.Anlatımınız yine harika gerçekten çok ama çok Teşekkürler..
    Birde Hocam Design Pattern konularına mı değinseniz acaba bu şekilde anlatarak yine bizlere faydalı olacağı kanaatindeyim :)
    Saygılarımla

  8. Şuanda .NET Core, vNext’in yerini aldı diyebilir miyiz?

Omer için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak.