Aracılığıyla paylaş


Eylem Filtrelerini Anlama (VB)

Microsoft tarafından

PDF’yi İndir

Bu öğreticinin amacı eylem filtrelerini açıklamaktır. Eylem filtresi, bir denetleyici eylemine (veya denetleyicinin tamamına) uygulayabileceğiniz ve eylemin yürütülecek şeklini değiştiren bir özniteliktir.

Eylem Filtrelerini Anlama

Bu öğreticinin amacı eylem filtrelerini açıklamaktır. Eylem filtresi, bir denetleyici eylemine (veya denetleyicinin tamamına) uygulayabileceğiniz ve eylemin yürütülecek şeklini değiştiren bir özniteliktir. ASP.NET MVC çerçevesi çeşitli eylem filtreleri içerir:

  • OutputCache : Bu eylem filtresi, bir denetleyici eyleminin çıkışını belirtilen süre boyunca önbelleğe alır.
  • HandleError : Bu eylem filtresi, bir denetleyici eylemi yürütürken ortaya çıkarılan hataları işler.
  • Yetkile – Bu eylem filtresi, belirli bir kullanıcı veya role erişimi kısıtlamanızı sağlar.

Ayrıca kendi özel eylem filtrelerinizi de oluşturabilirsiniz. Örneğin, özel bir kimlik doğrulama sistemi uygulamak için özel bir eylem filtresi oluşturmak isteyebilirsiniz. Veya bir denetleyici eylemi tarafından döndürülen görünüm verilerini değiştiren bir eylem filtresi oluşturmak isteyebilirsiniz.

Bu öğreticide, sıfırdan eylem filtresi oluşturmayı öğreneceksiniz. Bir eylemin işlenmesinin farklı aşamalarını Visual Studio Çıkış penceresine kaydeden bir Günlük eylemi filtresi oluştururuz.

Eylem Filtresi Kullanma

Eylem filtresi bir özniteliktir. Eylem filtrelerinin çoğunu tek bir denetleyici eylemine veya denetleyicinin tamamına uygulayabilirsiniz.

Örneğin, Liste 1'deki Veri denetleyicisi, geçerli saati döndüren adlı Index() bir eylemi kullanıma sunar. Bu eylem, eylem filtresiyle OutputCache dekore edilmiştir. Bu filtre, eylem tarafından döndürülen değerin 10 saniye boyunca önbelleğe alınmasına neden olur.

Listeleme 1 – Controllers\DataController.vb

Public Class DataController
     Inherits System.Web.Mvc.Controller

     <OutputCache(Duration:=10)> _
     Function Index()
          Return DateTime.Now.ToString("T")

     End Function

End Class

Tarayıcınızın adres çubuğuna Index() URL /Data/Index girerek ve Yenile düğmesine birden çok kez basarak eylemi tekrar tekrar çağırırsanız, 10 saniye boyunca aynı zamanı görürsünüz. Eylemin Index() çıkışı 10 saniye boyunca önbelleğe alınır (bkz. Şekil 1).

Önbelleğe alınan süre

Şekil 01: Önbelleğe alınan süre (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Listeleme 1'de, yönteme OutputCacheIndex() tek bir eylem filtresi (eylem filtresi) uygulanır. Gerekirse, aynı eyleme birden çok eylem filtresi uygulayabilirsiniz. Örneğin, hem hem HandleError de eylem filtrelerini OutputCache aynı eyleme uygulamak isteyebilirsiniz.

Liste 1'de OutputCache eylem filtresi eyleme Index() uygulanır. Bu özniteliği sınıfın DataController kendisine de uygulayabilirsiniz. Bu durumda, denetleyici tarafından kullanıma sunulan herhangi bir eylem tarafından döndürülen sonuç 10 saniye boyunca önbelleğe alınır.

Farklı Filtre Türleri

ASP.NET MVC çerçevesi dört farklı filtre türünü destekler:

  1. Yetkilendirme filtreleri – özniteliğini IAuthorizationFilter uygular.
  2. Eylem filtreleri – özniteliğini IActionFilter uygular.
  3. Sonuç filtreleri – özniteliğini IResultFilter uygular.
  4. Özel durum filtreleri – özniteliğini IExceptionFilter uygular.

Filtreler yukarıda listelenen sırayla yürütülür. Örneğin, yetkilendirme filtreleri her zaman eylem filtreleri ve özel durum filtreleri diğer her filtre türünden sonra yürütülmeden önce yürütülür.

Yetkilendirme filtreleri, denetleyici eylemleri için kimlik doğrulaması ve yetkilendirme uygulamak için kullanılır. Örneğin Yetkilendirme filtresi, Yetkilendirme filtresi örneğidir.

Eylem filtreleri, bir denetleyici eylemi yürütülmeden önce ve sonra yürütülen mantığı içerir. Örneğin, bir denetleyici eyleminin döndürdüğü görünüm verilerini değiştirmek için bir eylem filtresi kullanabilirsiniz.

Sonuç filtreleri, bir görünüm sonucu yürütülmeden önce ve çalıştırıldıktan sonra yürütülen mantığı içerir. Örneğin, görünüm tarayıcıda işlenmeden hemen önce bir görünüm sonucunu değiştirmek isteyebilirsiniz.

Özel durum filtreleri çalıştırılacak son filtre türüdür. Denetleyici eylemleriniz veya denetleyici eylem sonuçlarınız tarafından oluşturulan hataları işlemek için özel durum filtresi kullanabilirsiniz. Hataları günlüğe kaydetmek için özel durum filtrelerini de kullanabilirsiniz.

Her farklı filtre türü belirli bir sırada yürütülür. Aynı türdeki filtrelerin yürütülecek sırasını denetlemek istiyorsanız, filtrenin Order özelliğini ayarlayabilirsiniz.

Tüm eylem filtreleri için temel sınıf sınıfıdır System.Web.Mvc.FilterAttribute . Belirli bir filtre türünü uygulamak istiyorsanız, temel Filter sınıfından devralan ve IAuthorizationFilter, IActionFilter, IResultFilter veya ExceptionFilter arabirimlerinden birini veya daha fazlasını uygulayan bir sınıf oluşturmanız gerekir.

Base ActionFilterAttribute Sınıfı

Özel eylem filtresi uygulamanızı kolaylaştırmak için ASP.NET MVC çerçevesi bir temel ActionFilterAttribute sınıf içerir. Bu sınıf hem ve IResultFilter arabirimlerini uygular hem de IActionFilter sınıfından Filter devralır.

Buradaki terim tamamen tutarlı değildir. Teknik olarak, ActionFilterAttribute sınıfından devralan bir sınıf hem eylem filtresi hem de sonuç filtresidir. Ancak, gevşek anlamda, eylem filtresi sözcüğü ASP.NET MVC çerçevesindeki herhangi bir filtre türüne başvurmak için kullanılır.

Temel ActionFilterAttribute sınıfı geçersiz kılabileceğiniz aşağıdaki yöntemlere sahiptir:

  • OnActionExecuting – Bu yöntem bir denetleyici eylemi yürütülmeden önce çağrılır.
  • OnActionExecuted – Bu yöntem bir denetleyici eylemi yürütüldükten sonra çağrılır.
  • OnResultExecuting – Bu yöntem bir denetleyici eylem sonucu yürütülmeden önce çağrılır.
  • OnResultExecuted – Bu yöntem, bir denetleyici eylem sonucu yürütüldükten sonra çağrılır.

Sonraki bölümde, bu farklı yöntemlerin her birini nasıl uygulayabileceğinizi göreceğiz.

Günlük Eylemi Filtresi Oluşturma

Özel eylem filtresini nasıl oluşturabileceğinizi göstermek için, bir denetleyici eylemini işleme aşamalarını Visual Studio Çıkış penceresine kaydeden bir özel eylem filtresi oluşturacağız. Bizim LogActionFilter liste 2'de yer alır.

Listeleme 2 – ActionFilters\LogActionFilter.vb

Public Class LogActionFilter
     Inherits ActionFilterAttribute

     Public Overrides Sub OnActionExecuting(ByVal filterContext As ActionExecutingContext)
          Log("OnActionExecuting", filterContext.RouteData)

     End Sub

     Public Overrides Sub OnActionExecuted(ByVal filterContext As ActionExecutedContext)
          Log("OnActionExecuted", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuting(ByVal filterContext As ResultExecutingContext)
          Log("OnResultExecuting", filterContext.RouteData)
     End Sub

     Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext)
          Log("OnResultExecuted", filterContext.RouteData)
     End Sub

     Private Sub Log(ByVal methodName As String, ByVal routeData As RouteData)
          Dim controllerName = routeData.Values("controller")
          Dim actionName = routeData.Values("action")
          Dim message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName)
          Debug.WriteLine(message, "Action Filter Log")
     End Sub

End Class

Liste 2'de , , ve yöntemlerinin OnActionExecuting()tümü yöntemini çağırırLog().OnResultExecuted()OnResultExecuting()OnActionExecuted() yönteminin adı ve geçerli yol verileri yöntemine Log() geçirilir. yöntemi Visual Log() Studio Çıkış penceresine bir ileti yazar (bkz. Şekil 2).

Visual Studio Çıkış penceresine yazma

Şekil 02: Visual Studio Çıkış penceresine yazma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Liste 3'teki Giriş denetleyicisi, Günlük eylemi filtresini tüm denetleyici sınıfına nasıl uygulayabileceğinizi gösterir. Giriş denetleyicisi tarafından kullanıma sunulan eylemlerden herhangi biri ( Index() yöntem veya About() yöntem) çağrıldığında, eylemi işleme aşamaları Visual Studio Çıkış penceresine kaydedilir.

Listeleme 3 – Controllers\HomeController.vb

<LogActionFilter()> _
Public Class HomeController
     Inherits System.Web.Mvc.Controller

     Function Index()
          Return View()
     End Function

     Function About()
          Return View()
     End Function

            End Class

Özet

Bu öğreticide MVC eylem filtrelerini ASP.NET tanıtıldınız. Dört farklı filtre türü hakkında bilgi edindiyseniz: yetkilendirme filtreleri, eylem filtreleri, sonuç filtreleri ve özel durum filtreleri. Ayrıca temel ActionFilterAttribute sınıf hakkında da bilgi edindiyseniz.

Son olarak, basit bir eylem filtresi uygulamayı öğrendinsiniz. Bir denetleyici eylemini işleme aşamalarını Visual Studio Çıkış penceresine kaydeden bir Günlük eylemi filtresi oluşturduk.