Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft tarafından
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).
Ş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:
- Yetkilendirme filtreleri – özniteliğini
IAuthorizationFilteruygular. - Eylem filtreleri – özniteliğini
IActionFilteruygular. - Sonuç filtreleri – özniteliğini
IResultFilteruygular. - Özel durum filtreleri – özniteliğini
IExceptionFilteruygular.
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).
Ş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.