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:
-
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(); } } -
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 } } -
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(); } -
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!"); } } -
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.