Aracılığıyla paylaş


Eylem Filtrelerini Anlama (C#)

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.
  • Yetki ver – 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 bir eylem filtresi oluşturmayı öğreneceksiniz. Bir eylemin işlenmesinin farklı aşamalarını Visual Studio Çıkış penceresine kaydeden bir Günlük eylem 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.cs

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
     public class DataController : Controller
     {
          [OutputCache(Duration=10)]
          public string Index()
          {
               return DateTime.Now.ToString("T");
          }
     }
}

Tarayıcınızın adres çubuğuna Index() /Data/Index URL'sini 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)

Liste 1'de, yönteme OutputCache tek bir eylem filtresi (eylem filtresi) uygulanır Index() . Gerekirse, aynı eyleme birden çok eylem filtresi uygulayabilirsiniz. Örneğin, hem hem HandleError de OutputCache eylem filtrelerini 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 bir Yetkilendirme filtresi örneğidir.

Eylem filtreleri, denetleyici eylemi yürütülmeden önce ve çalıştırıldıktan 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 tetiklenen hataları işlemek için bir ö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 bir veya daha fazla IAuthorizationFilter, IActionFilter, IResultFilterveya IExceptionFilter arabirimini uygulayan bir sınıf oluşturmanız gerekir.

Temel 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 terminoloji 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 özel bir eylem filtresi oluşturacağız. Liste LogActionFilter 2'de yer alır.

Liste 2 – ActionFilters\LogActionFilter.cs

using System;
using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1.ActionFilters
{
     public class LogActionFilter : ActionFilterAttribute

     {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting", filterContext.RouteData);       
          }

          public override void OnActionExecuted(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted", filterContext.RouteData);       
          }

          public override void OnResultExecuting(ResultExecutingContext filterContext)
          {
               Log("OnResultExecuting", filterContext.RouteData);       
          }

          public override void OnResultExecuted(ResultExecutedContext filterContext)
          {
               Log("OnResultExecuted", filterContext.RouteData);       
          }


          private void Log(string methodName, RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
               Debug.WriteLine(message, "Action Filter Log");
          }

     }
}

Liste 2'de , , ve yöntemlerinin OnActionExecuting()tümü yöntemini çağırırLog().OnResultExecuted()OnResultExecuting()OnActionExecuted() Yöntemin 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.cs

using System.Web.Mvc;
using MvcApplication1.ActionFilters;

namespace MvcApplication1.Controllers
{
     [LogActionFilter]
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               return View();
          }

          public ActionResult About()
          {
               return View();
          }
     }
}

Özet

Bu öğreticide MVC eylem filtrelerini ASP.NET tanıtıldınız. Dört farklı filtre türü hakkında bilgi edindiniz: 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.