ASP.NET MVC 4 Özel Eylem Filtreleri

Web Camps Ekibi tarafından

Web Camps Eğitim Setini indirin

ASP.NET MVC, bir eylem yöntemi çağrılmadan önce veya çağrıldıktan sonra filtreleme mantığını yürütmek için Eylem Filtreleri sağlar. Eylem Filtreleri, denetleyicinin eylem yöntemlerine eylem öncesi ve eylem sonrası davranış eklemek için bildirim temelli araçlar sağlayan özel özniteliklerdir.

Bu Uygulamalı Laboratuvarda, denetleyicinin isteklerini yakalamak ve bir sitenin etkinliğini bir veritabanı tablosunda günlüğe kaydetmek için MvcMusicStore çözümünde özel bir eylem filtresi özniteliği oluşturacaksınız. Günlük filtrenizi herhangi bir denetleyiciye veya eyleme ekleyerek ekleyebilirsiniz. Son olarak, ziyaretçi listesini gösteren günlük görünümünü görürsünüz.

Bu Uygulamalı Laboratuvar, ASP.NET MVC hakkında temel bilgilere sahip olduğunuzu varsayar. Daha önce MVC ASP.NET kullanmadıysanız, ASP.NET MVC 4 Temel Bilgileri Uygulamalı Laboratuvarı'na geçmenizi öneririz.

Not

Tüm örnek kod ve kod parçacıkları , Microsoft-Web/WebCampTrainingKit Yayınları'ndan edinilebilen Web Camps Eğitim Seti'ne dahildir. Bu laboratuvara özgü proje ASP.NET MVC 4 Özel Eylem Filtreleri'nde kullanılabilir.

Hedefler

Bu Hands-On Laboratuvarında şunları nasıl yapacağınızı öğreneceksiniz:

  • Filtreleme özelliklerini genişletmek için özel bir eylem filtresi özniteliği oluşturma
  • Belirli bir düzeye ekleme yaparak özel filtre özniteliği uygulama
  • Özel eylem filtrelerini genel olarak kaydetme

Önkoşullar

Bu laboratuvarı tamamlamak için aşağıdaki öğelere sahip olmanız gerekir:

Kurulum

Kod Parçacıkları Yükleme

Kolaylık olması için, bu laboratuvarda yöneteceğin kodun büyük bölümü Visual Studio kod parçacıkları olarak kullanılabilir. Kod parçacıklarını yüklemek için .\Source\Setup\CodeSnippets.vsi dosyasını çalıştırın.

Visual Studio Code Kod Parçacıkları hakkında bilgi sahibi değilseniz ve bunların nasıl kullanılacağını öğrenmek istiyorsanız, "Ek C: Kod Parçacıklarını Kullanma" belgesinde yer alan eke bakabilirsiniz.


Egzersiz

Bu Hands-On Laboratuvarı aşağıdaki alıştırmalardan oluşur:

  1. Alıştırma 1: Günlük eylemleri
  2. Alıştırma 2: Birden Çok Eylem Filtresini Yönetme

Bu laboratuvarın tamamlanması için tahmini süre: 30 dakika.

Not

Her alıştırmaya, alıştırmaları tamamladıktan sonra elde ettiğiniz çözümü içeren bir End klasörü eşlik eder. Alıştırmalarda ek yardıma ihtiyacınız varsa bu çözümü kılavuz olarak kullanabilirsiniz.

Alıştırma 1: Günlük Eylemleri

Bu alıştırmada, ASP.NET MVC 4 Filtre Sağlayıcılarını kullanarak özel eylem günlüğü filtresi oluşturmayı öğreneceksiniz. Bu amaçla MusicStore sitesine, seçilen denetleyicilerdeki tüm etkinlikleri kaydedecek bir günlük filtresi uygulayacaksınız.

Filtre, ActionFilterAttributeClass'ı genişletir ve her isteği yakalamak ve ardından günlüğe kaydetme eylemlerini gerçekleştirmek için OnActionExecuting yöntemini geçersiz kılar. HTTP istekleri, yürütme yöntemleri, sonuçlar ve parametreler hakkındaki bağlam bilgileri ASP.NET MVC ActionExecutingContext sınıfı tarafından sağlanacaktır .

Not

ASP.NET MVC 4'te özel filtre oluşturmadan kullanabileceğiniz varsayılan filtre sağlayıcıları da vardır. ASP.NET MVC 4 aşağıdaki filtre türlerini sağlar:

  • Kimlik doğrulaması gerçekleştirme veya isteğin özelliklerini doğrulama gibi bir eylem yönteminin yürütülip yürütülmeyeceğiyle ilgili güvenlik kararları veren yetkilendirme filtresi.
  • Eylem yöntemi yürütmesini sarmalayan eylem filtresi. Bu filtre, eylem yöntemine ek veri sağlama, dönüş değerini inceleme veya eylem yönteminin yürütülmesini iptal etme gibi ek işlemler gerçekleştirebilir
  • ActionResult nesnesinin yürütülmesini sarmalayan sonuç filtresi. Bu filtre sonucun HTTP yanıtını değiştirme gibi ek işlemler gerçekleştirebilir.
  • Yetkilendirme filtrelerinden başlayıp sonucun yürütülmesiyle biten, eylem yönteminde bir yerde işlenmeyen bir özel durum oluşursa yürütülen özel durum filtresi. Özel durum filtreleri, günlüğe kaydetme veya hata sayfası görüntüleme gibi görevler için kullanılabilir.

Filtre Sağlayıcıları hakkında daha fazla bilgi için lütfen şu MSDN bağlantısını ziyaret edin: (https://msdn.microsoft.com/library/dd410209.aspx) .

MVC Music Store Uygulama günlüğü özelliği hakkında

Bu Müzik Deposu çözümü, site günlüğü için actionlog adlı yeni bir veri modeli tablosuna sahiptir ve şu alanları içerir: İstek alan denetleyicinin adı, Çağrılan eylem, İstemci IP'si ve Zaman damgası.

Veri modeli. ActionLog tablosu.

Veri modeli - ActionLog tablosu

Çözüm, Eylem günlüğü için MvcMusicStores/Views/ActionLog konumunda bulunabilen bir ASP.NET MVC Görünümü sağlar:

Eylem Günlüğü görünümü

Eylem Günlüğü görünümü

Verilen bu yapıyla, tüm çalışma denetleyicinin isteğini kesmeye ve özel filtreleme kullanarak günlüğe kaydetmeyi gerçekleştirmeye odaklanacaktır.

Görev 1 - Denetleyicinin İsteğini Yakalamak için Özel Filtre Oluşturma

Bu görevde, günlüğe kaydetme mantığını içerecek özel bir filtre öznitelik sınıfı oluşturacaksınız. Bu amaçla ASP.NET MVC ActionFilterAttribute Sınıfını genişletecek ve IActionFilter arabirimini uygulayacaksınız.

Not

ActionFilterAttribute, tüm öznitelik filtreleri için temel sınıftır. Denetleyici eyleminin yürütülmesinden sonra ve öncesinde belirli bir mantığı yürütmek için aşağıdaki yöntemleri sağlar:

  • OnActionExecuting(ActionExecutingContext filterContext): Eylem yönteminin çağrılmasından hemen önce.
  • OnActionExecuted(ActionExecutedContext filterContext): Eylem yöntemi çağrıldıktan sonra ve sonuç yürütülmeden önce (görünüm işlemeden önce).
  • OnResultExecuting(ResultExecutingContext filterContext): Sonuç yürütülmeden hemen önce (işlemeyi görüntülemeden önce).
  • OnResultExecuted(ResultExecutedContext filterContext): Sonuç yürütüldükten sonra (görünüm işlendikten sonra).

Bu yöntemlerden herhangi birini türetilmiş bir sınıfa geçersiz kılarak kendi filtreleme kodunuzu yürütebilirsiniz.

  1. \Source\Ex01-LoggingActions\Begin klasöründe bulunan Begin çözümünü açın.

    1. Devam etmeden önce bazı eksik NuGet paketlerini indirmeniz gerekir. Bunu yapmak için Proje menüsüne tıklayın ve NuGet Paketlerini Yönet'i seçin.

    2. Eksik paketleri indirmek için NuGet Paketlerini Yönet iletişim kutusunda Geri Yükle'ye tıklayın.

    3. Son olarak, Derleme Çözümü Oluştur'a | tıklayarakçözümü derleyin.

      Not

      NuGet kullanmanın avantajlarından biri, projenizdeki tüm kitaplıkları göndermeniz gerekmesi ve proje boyutunun küçültülmesidir. NuGet Power Tools ile, Packages.config dosyasındaki paket sürümlerini belirterek, projeyi ilk kez çalıştırdığınızda gerekli tüm kitaplıkları indirebilirsiniz. Bu nedenle, bu laboratuvardan mevcut bir çözümü açtıktan sonra bu adımları çalıştırmanız gerekir.

      Daha fazla bilgi için şu makaleye bakın: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Filtreler klasörüne yeni bir C# sınıfı ekleyin ve CustomActionFilter.cs olarak adlandırın. Bu klasör tüm özel filtreleri depolar.

  3. CustomActionFilter.cs dosyasını açın ve System.Web.Mvc ve MvcMusicStore.Models ad alanlarına başvuru ekleyin:

    (Kod Parçacığı - ASP.NET MVC 4 Özel Eylem Filtreleri - Ex1-CustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. CustomActionFilter sınıfınıActionFilterAttribute'tan devralın ve CustomActionFilter sınıfının IActionFilter arabirimi uygulamasını sağlayın.

    //...
    namespace MvcMusicStore.Filters
    {
        public class CustomActionFilter : ActionFilterAttribute, IActionFilter
        {
            //...
        }
    }
    
  5. CustomActionFilter sınıfının OnActionExecuting yöntemini geçersiz kılması ve filtrenin yürütülmesini günlüğe kaydetmek için gerekli mantığı eklemesini sağlayın. Bunu yapmak için CustomActionFilter sınıfına aşağıdaki vurgulanmış kodu ekleyin.

    (Kod Parçacığı - ASP.NET MVC 4 Özel Eylem Filtreleri - Ex1-LoggingActions)

    public class CustomActionFilter : ActionFilterAttribute, IActionFilter
    {
        void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {
            // TODO: Add your action filter's tasks here
    
            // Log Action Filter call
            using (MusicStoreEntities storeDb = new MusicStoreEntities())
            {
                ActionLog log = new ActionLog()
                {
                    Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                    Action = string.Concat(filterContext.ActionDescriptor.ActionName, " (Logged By: Custom Action Filter)"),
                    IP = filterContext.HttpContext.Request.UserHostAddress,
                    DateTime = filterContext.HttpContext.Timestamp
                };
                storeDb.ActionLogs.Add(log);
                storeDb.SaveChanges();
                OnActionExecuting(filterContext);
            }
        }
    }
    

    Not

    OnActionExecuting yöntemi, yeni bir ActionLog yazmaç eklemek için Entity Framework kullanıyor. Yeni bir varlık örneği oluşturur ve filterContext'ten bağlam bilgileriyle doldurur.

    ControllerContext sınıfı hakkında daha fazla bilgiyi msdn'den edinebilirsiniz.

Görev 2 - Depo Denetleyicisi Sınıfına Kod Kesme Noktası Ekleme

Bu görevde, özel filtreyi günlüğe kaydedilecek tüm denetleyici sınıflarına ve denetleyici eylemlerine ekleyerek ekleyebilirsiniz. Bu alıştırmanın amacı doğrultusunda, Store Controller sınıfının bir günlüğü olacaktır.

ActionLogFilterAttribute özel filtresinden OnActionExecuting yöntemi, eklenen bir öğe çağrıldığında çalışır.

Belirli bir denetleyici yöntemini kesmek de mümkündür.

  1. MvcMusicStore\Controllers konumunda StoreController'ı açın ve Filtreler ad alanına bir başvuru ekleyin:

    using System.Linq;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    using MvcMusicStore.Filters;
    
  2. Sınıf bildiriminden önce [CustomActionFilter] özniteliğini ekleyerek CustomActionFilter özel filtresini StoreController sınıfına ekleyin.

    ...
    [CustomActionFilter]
    public class StoreController : Controller
    {
        ...
    }
    

    Not

    Bir filtre bir denetleyici sınıfına eklendiğinde, tüm eylemleri de eklenir. Filtreyi yalnızca bir eylem kümesi için uygulamak isterseniz, her birine [CustomActionFilter] eklemeniz gerekir:

    [CustomActionFilter]
    public ActionResult Index()
    {
      ...
    }
    
    [CustomActionFilter]
    public ActionResult Browse(string genre)
    {
      ...
    }
    

Görev 3 - Uygulamayı Çalıştırma

Bu görevde günlük filtresinin çalışıp çalışmadığını test edeceksiniz. Uygulamayı başlatıp mağazayı ziyaret edecek ve ardından günlüğe kaydedilen etkinlikleri denetleyeceksiniz.

  1. Uygulamayı çalıştırmak için F5'e basın.

  2. Günlük görünümünün başlangıç durumunu görmek için /ActionLog'a gidin:

    Ekran görüntüsü, sayfa etkinliğinden önceki Eylem Günlüğü durumunu gösterir.

    Sayfa etkinliği öncesinde günlük izleyicisi durumu

    Not

    Varsayılan olarak, menü için mevcut türler alınırken her zaman oluşturulan bir öğe gösterilir.

    Kolaylık sağlamak amacıyla, uygulama her çalıştığında ActionLog tablosunu temizleyerek yalnızca belirli görevlerin doğrulama günlüklerini gösteriyoruz.

    Mağaza Denetleyicisi'nde yürütülen tüm eylemler için geçmiş günlüğünü kaydetmek için aşağıdaki kodu Session_Start yönteminden ( Global.asax sınıfında) kaldırmanız gerekebilir.

    // Clean up Logs Table
    MusicStoreEntities storeDB = new MusicStoreEntities();
    foreach (var log in 
    
    storeDB.ActionLogs.ToList())
    {
       storeDB.ActionLogs.Remove(log);
    }
    
    storeDB.SaveChanges();
    
  3. Menüden Tarzlar'dan birine tıklayın ve kullanılabilir bir albüme göz atma gibi bazı eylemler gerçekleştirin.

  4. /ActionLog konumuna gidin ve günlük boşsa sayfayı yenilemek için F5 tuşuna basın. Ziyaretlerinizin izlendiğini denetleyin:

    Ziyaretlerinizi doğrulayabileceğiniz Eylem Günlüğü'nü gösteren ekran görüntüsü.

    Etkinliği günlüğe kaydedilen eylem günlüğü

Alıştırma 2: Birden Çok Eylem Filtresini Yönetme

Bu alıştırmada StoreController sınıfına ikinci bir Özel Eylem Filtresi ekleyecek ve her iki filtrenin de yürütüleceği sırayı tanımlaacaksınız. Ardından, filtreyi Genel olarak kaydetmek için kodu güncelleştirirsiniz.

Filtrelerin yürütme sırasını tanımlarken dikkate alınması gereken farklı seçenekler vardır. Örneğin Order özelliği ve Filtrelerin kapsamı:

Filtrelerin her biri için bir Kapsam tanımlayabilirsiniz; örneğin, Denetleyici Kapsamı içinde çalıştırılacak tüm Eylem Filtrelerinin ve Genel kapsamda çalıştırılacak tüm Yetkilendirme Filtrelerinin kapsamını belirleyebilirsiniz. Kapsamlar tanımlı bir yürütme sırasına sahiptir.

Ayrıca, her eylem filtresinin, filtre kapsamındaki yürütme sırasını belirlemek için kullanılan bir Order özelliği vardır.

Özel Eylem Filtreleri yürütme sırası hakkında daha fazla bilgi için lütfen şu MSDN makalesini ziyaret edin: (https://msdn.microsoft.com/library/dd381609(v=vs.98).aspx).

Görev 1: Yeni Bir Özel Eylem Filtresi Oluşturma

Bu görevde, StoreController sınıfına eklemek için yeni bir Özel Eylem Filtresi oluşturacak ve filtrelerin yürütme sırasını yönetmeyi öğreneceksiniz.

  1. \Source\Ex02-ManagingMultipleActionFilters\Begin klasöründe bulunan Begin çözümünü açın. Aksi takdirde, önceki alıştırmayı tamamlayarak elde edilen End çözümünü kullanmaya devam edebilirsiniz.

    1. Sağlanan Begin çözümünü açtıysanız devam etmeden önce bazı eksik NuGet paketlerini indirmeniz gerekir. Bunu yapmak için Proje menüsüne tıklayın ve NuGet Paketlerini Yönet'i seçin.

    2. Eksik paketleri indirmek için NuGet Paketlerini Yönet iletişim kutusunda Geri Yükle'ye tıklayın.

    3. Son olarak, Derleme Çözümü Oluştur'a | tıklayarakçözümü derleyin.

      Not

      NuGet kullanmanın avantajlarından biri, projenizdeki tüm kitaplıkları göndermeniz gerekmesi ve proje boyutunun küçültülmesidir. NuGet Power Tools ile, Packages.config dosyasındaki paket sürümlerini belirterek, projeyi ilk kez çalıştırdığınızda gerekli tüm kitaplıkları indirebilirsiniz. Bu nedenle, bu laboratuvardan mevcut bir çözümü açtıktan sonra bu adımları çalıştırmanız gerekir.

      Daha fazla bilgi için şu makaleye bakın: https://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Filtreler klasörüne yeni bir C# sınıfı ekleyin ve myNewCustomActionFilter.cs olarak adlandırın

  3. MyNewCustomActionFilter.cs dosyasını açın ve System.Web.Mvc ve MvcMusicStore.Models ad alanına bir başvuru ekleyin:

    (Kod Parçacığı - ASP.NET MVC 4 Özel Eylem Filtreleri - Ex2-MyNewCustomActionFilterNamespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcMusicStore.Models;
    
  4. Varsayılan sınıf bildirimini aşağıdaki kodla değiştirin.

    (Kod Parçacığı - ASP.NET MVC 4 Özel Eylem Filtreleri - Ex2-MyNewCustomActionFilterClass)

    public class MyNewCustomActionFilter : ActionFilterAttribute, IActionFilter
    {
      void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
    
      {
            // TODO: Add your acction filter's tasks here
    
            // Log Action Filter Call
            MusicStoreEntities storeDB = new MusicStoreEntities();
    
            ActionLog log = new ActionLog()
            {
                 Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
                 Action = filterContext.ActionDescriptor.ActionName + " (Logged By: 
    
    MyNewCustomActionFilter)",
                 IP = filterContext.HttpContext.Request.UserHostAddress,
                 DateTime = filterContext.HttpContext.Timestamp
            };
    
            storeDB.ActionLogs.Add(log);
            storeDB.SaveChanges();
    
            this.OnActionExecuting(filterContext);
      }
    }
    

    Not

    Bu Özel Eylem Filtresi, önceki alıştırmada oluşturduğunuzla neredeyse aynıdır. Temel fark, günlüğü hangi filtrenin kaydettiğini belirlemek için bu yeni sınıfın adıyla güncelleştirilmiş "Günlüğe Kaydeden" özniteliğine sahip olmasıdır.

Görev 2: StoreController Sınıfına yeni bir Kod Kesme Aracı Ekleme

Bu görevde, StoreController Sınıfına yeni bir özel filtre ekleyecek ve her iki filtrenin birlikte nasıl çalıştığını doğrulamak için çözümü çalıştıracaksınız.

  1. MvcMusicStore\Controllers konumundaki StoreController sınıfını açın ve aşağıdaki kodda gösterildiği gibi MyNewCustomActionFilter özel filtresini StoreController sınıfına ekleyin.

    [MyNewCustomActionFilter]
    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Şimdi bu iki Özel Eylem Filtresinin nasıl çalıştığını görmek için uygulamayı çalıştırın. Bunu yapmak için F5 tuşuna basın ve uygulama başlayana kadar bekleyin.

  3. Günlük görünümünün başlangıç durumunu görmek için /ActionLog'a gidin.

    Eylem Günlüğü izleyicisinin ilk durumundaki durumunu gösteren ekran görüntüsü.

    Sayfa etkinliği öncesinde günlük izleyicisi durumu

  4. Menüden Tarzlar'dan birine tıklayın ve kullanılabilir bir albüme göz atma gibi bazı eylemler gerçekleştirin.

  5. Bu kez kontrol edin; ziyaretleriniz iki kez izlendi: StorageController sınıfına eklediğiniz her Özel Eylem Filtresi için bir kez.

    Ziyaretlerinizin iki kez izlendiği Eylem Günlüğünü gösteren ekran görüntüsü.

    Etkinliği günlüğe kaydedilen eylem günlüğü

  6. Tarayıcıyı kapatın.

Görev 3: Filtre Sıralamasını Yönetme

Bu görevde, Order özelliğini kullanarak filtrelerin yürütme sırasını yönetmeyi öğreneceksiniz.

  1. MvcMusicStore\Controllers konumundaki StoreController sınıfını açın ve aşağıda gösterildiği gibi her iki filtrede de Order özelliğini belirtin.

    [MyNewCustomActionFilter(Order = 2)]
    [CustomActionFilter(Order = 1)]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Şimdi, Order özelliğinin değerine bağlı olarak filtrelerin nasıl yürütülür olduğunu doğrulayın. En küçük Order değerine (CustomActionFilter) sahip filtrenin yürütülen ilk filtre olduğunu göreceksiniz. F5 tuşuna basın ve uygulama başlayana kadar bekleyin.

  3. Günlük görünümünün başlangıç durumunu görmek için /ActionLog'a gidin.

    Ekran görüntüsü, sayfa etkinliğinden önceki Eylem Günlüğünü gösterir.

    Sayfa etkinliği öncesinde günlük izleyicisi durumu

  4. Menüden Tarzlar'dan birine tıklayın ve kullanılabilir bir albüme göz atma gibi bazı eylemler gerçekleştirin.

  5. Bu kez, ziyaretlerinizin filtrelerin Sipariş değeri: CustomActionFilter günlüklerinin ilk değerine göre sıralanmış olarak izlendiğini denetleyin.

    CustomActionFilter tarafından sıralanmış etkinliğin yer aldığı Eylem Günlüğünü gösteren ekran görüntüsü.

    Etkinliği günlüğe kaydedilen eylem günlüğü

  6. Şimdi Filtreler'in sipariş değerini güncelleştirecek ve günlüğe kaydetme sırasının nasıl değiştiğini doğrulayacağız. StoreController sınıfında Filtrelerin Sipariş değerini aşağıda gösterildiği gibi güncelleştirin.

    [MyNewCustomActionFilter(Order = 1)]
    [CustomActionFilter(Order = 2)]
    public class StoreController : Controller
    {
    ...
    }
    
  7. F5 tuşuna basarak uygulamayı yeniden çalıştırın.

  8. Menüden Tarzlar'dan birine tıklayın ve kullanılabilir bir albüme göz atma gibi bazı eylemler gerçekleştirin.

  9. Bu kez, myNewCustomActionFilter filtresi tarafından oluşturulan günlüklerin önce görünüp görünmediğini denetleyin.

    Ekran görüntüsü, önce belirtilen filtre tarafından oluşturulan günlüklerin yer aldığı Eylem Günlüğü'nü gösterir.

    Etkinliği günlüğe kaydedilen eylem günlüğü

4. Görev: Filtreleri Genel Olarak Kaydetme

Bu görevde, yeni filtreyi (MyNewCustomActionFilter) genel filtre olarak kaydetmek için çözümü güncelleştireceksiniz. Bunu yaptığınızda, yalnızca önceki görevde olduğu gibi StoreController işlemlerinde değil, uygulamada gerçekleştirilen tüm eylemler tarafından tetiklenir.

  1. StoreController sınıfında [MyNewCustomActionFilter] özniteliğini ve order özelliğini [CustomActionFilter] öğesinden kaldırın. Aşağıdakine benzer olmalıdır:

    [CustomActionFilter]
    public class StoreController : Controller
    {
    ...
    }
    
  2. Global.asax dosyasını açın ve Application_Start yöntemini bulun. Uygulama her başlatıldığında, FilterConfig sınıfı içinde RegisterGlobalFilters yöntemini çağırarak genel filtreleri kaydettiğinize dikkat edin.

    Global.asax'a Genel Filtreleri Kaydetme

    Global.asax'a Genel Filtreleri Kaydetme

  3. App_Start klasörün içinde FilterConfig.cs dosyasını açın.

  4. System.Web.Mvc kullanarak öğesine başvuru ekleyin; MvcMusicStore.Filters kullanarak; Ad alanı.

    using System.Web.Mvc;
    using MvcMusicStore.Filters;
    
  5. Özel filtrenizi ekleyerek RegisterGlobalFilters yöntemini güncelleştirin. Bunu yapmak için vurgulanan kodu ekleyin:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new MyNewCustomActionFilter());
    }
    
  6. F5 tuşuna basarak uygulamayı çalıştırın.

  7. Menüden Tarzlar'dan birine tıklayın ve kullanılabilir bir albüme göz atma gibi bazı eylemler gerçekleştirin.

  8. Şimdi [MyNewCustomActionFilter] öğesinin HomeController ve ActionLogController'a da eklenmiş olup olmadığını denetleyin.

    Yeni özel filtrenizi denetleyebileceğiniz Eylem Günlüğü'nü gösteren ekran görüntüsü.

    Genel etkinlik günlüğe kaydedilen eylem günlüğü

Not

Ayrıca, Bu uygulamayı Ek B: Web Dağıtımı kullanarak ASP.NET MVC 4 Uygulaması Yayımlama'yı izleyerek Windows Azure Web Sitelerine dağıtabilirsiniz.


Özet

Bu Hands-On Laboratuvarını tamamlayarak bir eylem filtresini özel eylemleri yürütecek şekilde genişletmeyi öğrendiniz. Ayrıca, sayfa denetleyicilerinize herhangi bir filtre ekleme hakkında da bilgi edindiniz. Aşağıdaki kavramlar kullanıldı:

  • ASP.NET MVC ActionFilterAttribute sınıfıyla Özel Eylem filtreleri oluşturma
  • ASP.NET MVC denetleyicilerine filtre ekleme
  • Order özelliğini kullanarak filtre sıralamasını yönetme
  • Filtreleri genel olarak kaydetme

Ek A: Web için Visual Studio Express 2012'yi yükleme

Microsoft Web Platformu Yükleyicisi kullanarak Web için Microsoft Visual Studio Express 2012 veya başka bir "Express" sürümü yükleyebilirsiniz. Aşağıdaki yönergeler, Microsoft Web Platformu Yükleyicisi kullanarak Web için Visual Studio Express 2012'yi yüklemek için gereken adımlarda size yol gösterir.

  1. https://go.microsoft.com/?linkid=9810169 öğesine gidin. Alternatif olarak, Web Platformu Yükleyicisi'ni zaten yüklediyseniz, bunu açabilir ve "Windows Azure SDK ile Web için Visual Studio Express 2012" ürününü arayabilirsiniz.

  2. Şimdi Yükle'ye tıklayın. Web Platformu Yükleyiciniz yoksa, önce indirip yüklemeye yönlendirilirsiniz.

  3. Web Platformu Yükleyicisi açıldıktan sonra kurulumu başlatmak için Yükle'ye tıklayın.

    Yükleme Visual Studio Express

    Visual Studio Express yükleme

  4. Tüm ürünlerin lisanslarını ve koşullarını okuyun ve devam etmek için Kabul Ediyorum'a tıklayın.

    Lisans koşullarını kabul etme

    Lisans koşullarını kabul etme

  5. İndirme ve yükleme işlemi tamamlanana kadar bekleyin.

    Yükleme ilerleme durumu

    Yükleme ilerleme durumu

  6. Yükleme tamamlandığında Son'a tıklayın.

    Yükleme tamamlandı

    Yükleme tamamlandı

  7. Web Platformu Yükleyicisi'nin kapatılması için Çıkış'a tıklayın.

  8. Web için Visual Studio Express açmak için Başlangıç ekranına gidin ve "VS Express" yazmaya başlayın, ardından Web için VS Express kutucuğuna tıklayın.

    Web için VS Express kutucuğu

    Web için VS Express kutucuğu

Ek B: Web Dağıtımı Kullanarak ASP.NET MVC 4 Uygulaması Yayımlama

Bu ek, Windows Azure Yönetim Portalı'ndan yeni bir web sitesi oluşturmayı ve Windows Azure tarafından sağlanan Web Dağıtımı yayımlama özelliğinden yararlanarak laboratuvarı izleyerek elde ettiğiniz uygulamayı yayımlamayı gösterir.

Görev 1 - Windows Azure Portalı'ndan Yeni Bir Web Sitesi Oluşturma

  1. Windows Azure Yönetim Portalı'na gidin ve aboneliğinizle ilişkili Microsoft kimlik bilgilerini kullanarak oturum açın.

    Not

    Windows Azure ile 10 ASP.NET Web Sitesini ücretsiz olarak barındırabilir ve trafiğiniz arttıkça ölçeklendirin. Buradan kaydolabilirsiniz.

    Windows'ta oturum açın Azure portal

    Windows Azure Yönetim Portalı'nda oturum açın

  2. Komut çubuğunda Yeni'ye tıklayın.

    Yeni Web Sitesi Oluşturma

    Yeni Bir Web Sitesi Oluşturma

  3. İşlem | Web Sitesi'ne tıklayın. Ardından Hızlı Oluştur seçeneğini belirleyin. Yeni web sitesi için kullanılabilir bir URL sağlayın ve Web Sitesi Oluştur'a tıklayın.

    Not

    Windows Azure Web Sitesi, bulutta çalışan ve denetleyebileceğiniz ve yönetebileceğiniz bir web uygulamasının konağıdır. Hızlı Oluştur seçeneği, tamamlanmış bir web uygulamasını portalın dışından Windows Azure Web Sitesine dağıtmanıza olanak tanır. Veritabanı ayarlama adımlarını içermez.

    Hızlı Oluştur'u kullanarak yeni Bir Web Sitesi oluşturma Hızlı

    Hızlı Oluştur'u kullanarak yeni bir Web Sitesi oluşturma

  4. Yeni Web Sitesi oluşturulana kadar bekleyin.

  5. Web Sitesi oluşturulduktan sonra URL sütununun altındaki bağlantıya tıklayın. Yeni Web Sitesinin çalışıp çalışmadığını denetleyin.

    Yeni web sitesine göz atma Yeni

    Yeni web sitesine göz atma

    Web sitesini çalıştıran

    Web sitesi çalışıyor

  6. Portala Geri dön ve yönetim sayfalarını görüntülemek için Ad sütununun altındaki web sitesinin adına tıklayın.

    Web sitesi yönetim sayfalarını açma

    Web Sitesi yönetim sayfalarını açma

  7. Pano sayfasındaki hızlı bakış bölümünün altında Yayımlama profilini indir bağlantısına tıklayın.

    Not

    Yayımlama profili, etkinleştirilmiş her yayın yöntemi için bir web uygulamasını Windows Azure web sitesine yayımlamak için gereken tüm bilgileri içerir. Yayımlama profili, yayın yönteminin etkinleştirildiği uç noktaların her birine bağlanmak ve bu uç noktalarda kimlik doğrulaması yapmak için gereken URL'leri, kullanıcı kimlik bilgilerini ve veritabanı dizelerini içerir. Microsoft WebMatrix 2, Web için Microsoft Visual Studio Express ve Microsoft Visual Studio 2012, web uygulamalarını Windows Azure web sitelerinde yayımlamak üzere bu programların yapılandırmasını otomatikleştirmek için yayımlama profillerini okumayı destekler.

    Web sitesi yayımlama profilini indirme

    Web Sitesi yayımlama profilini indirme

  8. Profil yayımlama dosyasını bilinen bir konuma indirin. Bu alıştırmanın devamında, Visual Studio'dan bir web uygulamasını Windows Azure Web Sitelerine yayımlamak için bu dosyanın nasıl kullanılacağını göreceksiniz.

    Yayımlama profili dosyasını kaydetme

    Yayımlama profili dosyasını kaydetme

Görev 2 - Veritabanı Sunucusunu Yapılandırma

Uygulamanız SQL Server veritabanlarını kullanıyorsa bir SQL Veritabanı sunucusu oluşturmanız gerekir. SQL Server kullanmayan basit bir uygulama dağıtmak istiyorsanız bu görevi atlayabilirsiniz.

  1. Uygulama veritabanını depolamak için bir SQL Veritabanı sunucusu gerekir. Aboneliğinizdeki SQL Veritabanı sunucularını Sql Veritabanı | Sunucuları Sunucusu | Panosu'ndaki Windows Azure Yönetim portalında görüntüleyebilirsiniz. Oluşturulmuş bir sunucunuz yoksa, komut çubuğundaki Ekle düğmesini kullanarak bir sunucu oluşturabilirsiniz. Sonraki görevlerde kullanacağınız için sunucu adını ve URL'sini, yönetici oturum açma adını ve parolayı not alın. Veritabanını daha sonraki bir aşamada oluşturulacağı için henüz oluşturmayın.

    SQL Veritabanı Sunucu Panosu

    sunucu panosunu SQL Veritabanı

  2. Sonraki görevde Visual Studio'dan veritabanı bağlantısını test edecek, bu nedenle sunucunun İzin Verilen IP Adresleri listesine yerel IP adresinizi eklemeniz gerekir. Bunu yapmak için Yapılandır'a tıklayın, Geçerli İstemci IP Adresi'nden IP adresini seçin ve Başlangıç IP Adresi ve Bitiş IP Adresi metin kutularına yapıştırın ve add-client-ip-address-ok-button düğmesine tıklayın.

    İstemci IP Adresi Ekleme

    İstemci IP Adresi Ekleme

  3. İstemci IP Adresi izin verilen IP adresleri listesine eklendikten sonra, değişiklikleri onaylamak için Kaydet'e tıklayın.

    Değişiklikleri Onayla

    Değişiklikleri Onayla

Görev 3 - Web Dağıtımı kullanarak ASP.NET MVC 4 Uygulaması Yayımlama

  1. ASP.NET MVC 4 çözümüne Geri dön. Çözüm Gezgini web sitesi projesine sağ tıklayın ve Yayımla'yı seçin.

    Uygulamayı Yayımlama Uygulamayı

    Web sitesini yayımlama

  2. İlk göreve kaydettiğiniz yayımlama profilini içeri aktarın.

    Yayımlama profilini içeri aktarma Yayımlama

    Yayımlama profilini içeri aktarma

  3. Bağlantıyı Doğrula'ya tıklayın. Doğrulama tamamlandıktan sonra İleri'ye tıklayın.

    Not

    Bağlantıyı Doğrula düğmesinin yanında yeşil bir onay işareti göründüğünde doğrulama tamamlanır.

    Bağlantıyı Doğrulama Bağlantı

    Bağlantı doğrulanıyor

  4. Ayarlar sayfasındaki Veritabanları bölümünün altında veritabanı bağlantınızın metin kutusunun yanındaki düğmeye (defaultConnection gibi) tıklayın.

    Web dağıtımı yapılandırması

    Web dağıtımı yapılandırması

  5. Veritabanı bağlantısını aşağıdaki gibi yapılandırın:

    • Sunucu adı alanına tcp: ön ekini kullanarak SQL Veritabanı sunucu URL'nizi yazın.

    • Kullanıcı adı alanına sunucu yöneticinizin oturum açma adını yazın.

    • Parola'ya sunucu yöneticinizin oturum açma parolasını yazın.

    • Yeni bir veritabanı adı yazın.

      Hedef bağlantı dizesini yapılandırma

      Hedef bağlantı dizesini yapılandırma

  6. Daha sonra, Tamam'a tıklayın. Veritabanını oluşturmanız istendiğinde Evet'e tıklayın.

    Veritabanını oluşturma

    Veritabanı oluşturma

  7. Windows Azure'da SQL Veritabanı bağlanmak için kullanacağınız bağlantı dizesi Varsayılan Bağlantı metin kutusunda gösterilir. Ardından İleri'ye tıklayın.

    SQL Veritabanı

    SQL Veritabanı işaret eden bağlantı dizesi

  8. Önizleme sayfasında Yayımla'ya tıklayın.

    Web uygulamasını yayımlama Web

    Web uygulamasını yayımlama

  9. Yayımlama işlemi tamamlandıktan sonra, varsayılan tarayıcınız yayımlanan web sitesini açar.

Ek C: Kod Parçacıklarını Kullanma

Kod parçacıklarında ihtiyacınız olan tüm kodlar elinizin altındadır. Laboratuvar belgesi, aşağıdaki şekilde gösterildiği gibi bunları tam olarak ne zaman kullanabileceğinizi bildirir.

Projenize kod eklemek için Visual Studio kod parçacıklarını

Projenize kod eklemek için Visual Studio kod parçacıklarını kullanma

Klavye kullanarak kod parçacığı eklemek için (yalnızca C# )

  1. İmleci kodu eklemek istediğiniz yere getirin.
  2. Kod parçacığı adını yazmaya başlayın (boşluk veya kısa çizgi olmadan).
  3. IntelliSense'in eşleşen kod parçacıklarının adlarını görüntülemesini izleyin.
  4. Doğru kod parçacığını seçin (veya kod parçacığının adı seçilene kadar yazmaya devam edin).
  5. Kod parçacığını imleç konumuna eklemek için Sekme tuşuna iki kez basın.

parçacığı adını yazmaya başlayın Kod parçacığı adınıKod

Kod parçacığı adını yazmaya başlama

Vurgulanan kod parçacığını seçmek için Sekme tuşuna

Vurgulanan kod parçacığını seçmek için Sekme tuşuna basın

Sekme tuşuna yeniden bastığında kod parçacığı Sekme tuşuna yeniden basın seçeneğini genişletir

Sekme tuşuna yeniden bastığında kod parçacığı genişler

Fare kullanarak kod parçacığı eklemek için (C#, Visual Basic ve XML) 1. Kod parçacığını eklemek istediğiniz yere sağ tıklayın.

  1. Kod Parçacığı Ekle'yi ve ardından Kod Parçacıklarım'ı seçin.
  2. Listeden ilgili kod parçacığını tıklayarak seçin.

Kod parçacığını eklemek istediğiniz yere sağ tıklayın ve Kod Parçacığı Ekle'yi seçin Kod parçacığını

Kod parçacığını eklemek istediğiniz yere sağ tıklayın ve Kod Parçacığı Ekle'yi seçin

Listeden ilgili kod parçacığını seçin, üzerine tıklayarak seçin

Listeden ilgili kod parçacığına tıklayarak seçin