Sobes.tech
Middle+

C# da pipeline'larda filtrlardan qanday foydalanasiz? Ularning foydalanish misollarini keltira olasizmi?

sobes.tech AI

AIdan javob

C#-dagi filtrlash jarayonlarining pipeline-larida turli bosqichlarda ushlash va aralashish uchun ishlatiladi. ASP.NET Core veb-ilovalarida ular controllerlarning action metodlarini bajarishdan oldin, keyin yoki davomida mantiq qo'shish imkonini beradi, shuningdek, boshqa talablar ishlov berish darajalarida ham.

ASP.NET Core'da filtrlardan foydalanish misollari:

  1. Autentifikatsiya va Avtorizatsiya Filtrlari: Foydalanuvchining ma'lum bir harakatni bajarishga ruxsat berilganligini aniqlaydi.

    // Authorize atributi misoli
    [Authorize]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
    
  2. Resurs Filtrlari: Birinchi navbatda avtorizatsiya filtrlardan keyin bajariladi. Ular kesh qilish yoki pipeline-ni to'xtatishi mumkin.

    // Kesh qilish uchun resurs filtri misoli
    public class CacheResourceFilter : IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            // Harakatdan oldingi mantiq
        }
    
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            // Harakatdan keyingi, javob yozilishidan oldingi mantiq
        }
    }
    
  3. Harakat Filtrlari: Controller harakat metodini bajarishdan oldin va keyin bajariladi. Ma'lumotlarni tekshirish, log yozish yoki parametrlar va natijalarni o'zgartirish uchun qulay.

    // Log yozish uchun Action Filter misoli
    public class LogActionFilter : IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            // Harakatdan oldingi mantiq
            Console.WriteLine($"Harakatni bajarish: {context.ActionDescriptor.DisplayName}");
        }
    
        public void OnActionExecuted(ActionExecutedContext context)
        {
            // Harakatdan keyingi mantiq
            Console.WriteLine($"Harakat bajarildi: {context.ActionDescriptor.DisplayName}");
        }
    }
    
    // Action Filter-ni metodga qo'llash
    [LogActionFilter]
    public IActionResult About()
    {
        return View();
    }
    
  4. Istisno Filtrlari: Harakat metodining bajarilishi yoki boshqa filtrlarda yuzaga keladigan nazorat qilinmagan istisnalarni boshqaradi.

    // Xatoliklarni boshqarish uchun Custom Exception Filter misoli
    public class CustomExceptionFilter : IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            // Istisno bilan ishlash mantiqi
            context.Result = new ContentResult()
            {
                Content = "Xatolik yuz berdi.",
                StatusCode = 500
            };
            context.ExceptionHandled = true; // Istisno boshqarilganligini ko'rsatadi
        }
    }
    
    // Controller-ga Exception Filter-ni qo'llash
    [CustomExceptionFilter]
    public class ErrorController : Controller
    {
        public IActionResult Index()
        {
            throw new Exception("Nimadir noto'g'ri ketmoqda!");
        }
    }
    
  5. Natija Filtrlari: Natija metodini bajarishdan oldin va keyin bajariladi (masalan, ViewResult, JsonResult va boshqalar).

    // Natija uchun filtr misoli, natijani o'zgartirish
    public class CustomResultFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            // Natija metodini bajarishdan oldingi mantiq
            Console.WriteLine($"Bajarilayotgan natija turi: {context.Result.GetType().Name}");
        }
    
        public void OnResultExecuted(ResultExecutedContext context)
        {
            // Natija metodini bajarishdan keyingi mantiq
            Console.WriteLine($"Bajarilgan natija turi: {context.Result.GetType().Name}");
        }
    }
    

Filtrlashlar global (barcha so'rovlar uchun), controller darajasida yoki aniq bir action metodida qo'llanilishi mumkin. Ularning bajarilish tartibi ularning turi bilan belgilanadi.