Hogyan alkalmazza a szűrőket a pipeline-okban C#-ban? Tudna példákat adni a használatukra?
sobes.tech MI
Válasz az MI-től
A C#-pipeline-okban a szűrők (filterek) különböző szakaszokban közbeavatkoznak és beavatkoznak a kérés feldolgozásába vagy a feladat végrehajtásába. Az ASP.NET Core webalkalmazásokban lehetővé teszik logika hozzáadását az akciómetódusok végrehajtása előtt, után vagy közben, valamint más kérésfeldolgozási szinteken.
Az ASP.NET Core-ban a szűrők használatának példái:
-
Hitelesítés és jogosultság (Authentication/Authorization Filters): Meghatározzák, hogy a felhasználó jogosult-e egy adott művelet végrehajtására.
// Authorize attribútum példa [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Erőforrás szűrők (Resource Filters): Elsőként futnak az engedélyezési szűrők után. Cache-elést végezhetnek vagy megszakíthatják a pipeline-t.
// Erőforrás szűrő cache-eléshez példa public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Logika az Action metódus végrehajtása előtt } public void OnResourceExecuted(ResourceExecutedContext context) { // Logika az Action metódus végrehajtása után, de a válasz írása előtt } } -
Akció szűrők (Action Filters): A kontrollerek akciómetódusának végrehajtása előtt és után futnak. Ideális adatok validálására, naplózásra vagy paraméterek és eredmények módosítására.
// Naplózó Action Filter példa public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Az akció végrehajtása előtt Console.WriteLine($"Akció végrehajtása: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Az akció végrehajtása után Console.WriteLine($"Akció végrehajtva: {context.ActionDescriptor.DisplayName}"); } } // Action Filter alkalmazása egy kontrollermetódusra [LogActionFilter] public IActionResult About() { return View(); } -
Kivétel szűrők (Exception Filters): Kezelik a nem kezelt kivételeket, amelyek az akciómetódus vagy más szűrők végrehajtása során keletkeznek.
// Kivétel szűrő példa hibakezeléshez public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Hibakezelő logika context.Result = new ContentResult() { Content = "Hiba történt.", StatusCode = 500 }; context.ExceptionHandled = true; // Jelezve, hogy a kivétel kezelve lett } } // Exception Filter alkalmazása egy kontrolleren [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Valami baj történt!"); } } -
Eredmény szűrők (Result Filters): A művelet eredményének végrehajtása előtt és után futnak (pl. ViewResult, JsonResult stb. végrehajtása előtt vagy után).
// Eredmény módosítására szolgáló Result Filter példa public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Logika az eredmény végrehajtása előtt Console.WriteLine($"Eredmény típusa: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Logika az eredmény végrehajtása után Console.WriteLine($"Végrehajtott eredmény típusa: {context.Result.GetType().Name}"); } }
A szűrőket globálisan (minden kérésre), kontrollerszinten vagy konkrét metódus szinten lehet alkalmazni. Az ő végrehajtási sorrendjük típusuktól függ.