Sobes.tech
Middle+

C#'ta pipeline'larda filtreleri nasıl uyguluyorsunuz? Kullanımlarına örnekler verebilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

C#'daki filtreler, istek işleme veya görev yürütme aşamalarında yakalama ve müdahale etmek için kullanılır. ASP.NET Core web uygulamalarında, bunlar denetleyicilerin eylem yöntemlerinin yürütülmesinden önce, sonra veya sırasında ve diğer istek işleme seviyelerinde mantık eklemeye olanak tanır.

ASP.NET Core'da filtrelerin kullanımı örnekleri:

  1. Kimlik Doğrulama ve Yetkilendirme Filtreleri: Bir kullanıcının belirli bir işlemi gerçekleştirmeye yetkili olup olmadığını belirler.

    // Authorize özniteliği örneği
    [Authorize]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
    
  2. Kaynak Filtreleri: Yetkilendirme filtrelerinden sonra ilk olarak yürütülür. Önbelleğe alma yapabilir veya pipeline'ı durdurabilir.

    // Önbelleğe alma için kaynak filtresi örneği
    public class CacheResourceFilter : IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            // Eylem yürütülmeden önceki mantık
        }
    
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            // Eylem yürütüldükten sonra, yanıt yazılmadan önceki mantık
        }
    }
    
  3. Eylem Filtreleri: Denetleyici eylem yönteminin yürütülmesinden önce ve sonra yürütülür. Veri doğrulama, günlük kaydı veya parametre ve sonuçların değiştirilmesi için uygundur.

    // Günlük kaydı için Eylem Filtresi örneği
    public class LogActionFilter : IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            // Eylemden önceki mantık
            Console.WriteLine($"Eylem yürütülüyor: {context.ActionDescriptor.DisplayName}");
        }
    
        public void OnActionExecuted(ActionExecutedContext context)
        {
            // Eylemden sonra mantık
            Console.WriteLine($"Eylem tamamlandı: {context.ActionDescriptor.DisplayName}");
        }
    }
    
    // Eylem Filtresi'nin denetleyici yöntemine uygulanması
    [LogActionFilter]
    public IActionResult About()
    {
        return View();
    }
    
  4. İstisna Filtreleri: Eylem yöntemi veya diğer filtreler sırasında oluşan yakalanmamış istisnaları işler.

    // Hata işleme için özel istisna filtresi örneği
    public class CustomExceptionFilter : IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            // İstisna işleme mantığı
            context.Result = new ContentResult()
            {
                Content = "Bir hata oluştu.",
                StatusCode = 500
            };
            context.ExceptionHandled = true; // İstisnanın işlendiğini belirtir
        }
    }
    
    // İstisna filtresinin denetleyiciye uygulanması
    [CustomExceptionFilter]
    public class ErrorController : Controller
    {
        public IActionResult Index()
        {
            throw new Exception("Bir şeyler yanlış gitti!");
        }
    }
    
  5. Sonuç Filtreleri: Sonuç yöntemi yürütülmeden önce ve sonra yürütülür (örneğin, ViewResult, JsonResult gibi).

    // Sonuç sonucunu değiştirmek için örnek
    public class CustomResultFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            // Sonuç yöntemi yürütülmeden önceki mantık
            Console.WriteLine($"Yürütülen sonuç tipi: {context.Result.GetType().Name}");
        }
    
        public void OnResultExecuted(ResultExecutedContext context)
        {
            // Sonuç yöntemi yürütüldükten sonraki mantık
            Console.WriteLine($"Yürütülen sonuç tipi: {context.Result.GetType().Name}");
        }
    }
    

Filtreler, küresel olarak (tüm istekler için), denetleyici seviyesinde veya belirli bir eylem yöntemi seviyesinde uygulanabilir. Yürütme sırası, türlerine göre belirlenir.