Ako používate filtre v pipeline-och v C#? Môžete uviesť príklady ich použitia?
sobes.tech AI
Odpoveď od AI
Filtre v pipeline v C# sa používajú na zachytávanie a zasahovanie na rôznych etapách spracovania požiadavky alebo vykonávania úlohy. V súvislosti s webovými aplikáciami na ASP.NET Core umožňujú pridávať logiku pred, po alebo počas vykonávania metód akcií kontrolérov, ako aj na iných úrovniach spracovania požiadaviek.
Príklady použitia filtrov v ASP.NET Core:
-
Autentifikácia a autorizácia (Authentication/Authorization Filters): Určujú, či je používateľ oprávnený vykonať určitú akciu.
// Príklad atribútu Authorize [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Filtre zdrojov (Resource Filters): Sú vykonávané ako prvé po filtroch autorizácie. Môžu vykonávať cacheovanie alebo prerušiť pipeline.
// Príklad filtra zdrojov pre cacheovanie public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Logika pred vykonaním akcie } public void OnResourceExecuted(ResourceExecutedContext context) { // Logika po vykonaní akcie, ale pred zápisom odpovede } } -
Filtre akcií (Action Filters): Sú vykonávané pred a po vykonaní metódy akcie kontroléra. Sú vhodné na validáciu dát, logovanie alebo modifikáciu parametrov a výsledkov.
// Príklad filtra akcie na logovanie public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Logika pred vykonaním akcie Console.WriteLine($"Executing action: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Logika po vykonaní akcie Console.WriteLine($"Executed action: {context.ActionDescriptor.DisplayName}"); } } // Použitie filtra akcie na metóde kontroléra [LogActionFilter] public IActionResult About() { return View(); } -
Filtre výnimiek (Exception Filters): Spracovávajú neošetrené výnimky, ktoré vzniknú počas vykonávania metódy akcie alebo iných filtrov.
// Príklad filtra výnimiek na spracovanie chýb public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Logika spracovania výnimky context.Result = new ContentResult() { Content = "An error occurred.", StatusCode = 500 }; context.ExceptionHandled = true; // Označujeme, že výnimka bola spracovaná } } // Použitie filtra výnimiek na kontroléri [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Something went wrong!"); } } -
Filtre výsledkov (Result Filters): Sú vykonávané pred a po vykonaní metódy výsledku akcie (napríklad pred alebo po vykonaní ViewResult, JsonResult a pod.).
// Príklad filtra výsledku na modifikáciu výsledku public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Logika pred vykonaním metódy výsledku Console.WriteLine($"Executing result type: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Logika po vykonaní metódy výsledku Console.WriteLine($"Executed result type: {context.Result.GetType().Name}"); } }
Filtre môžu byť aplikované globálne (pre všetky požiadavky), na úrovni kontroléra alebo na úrovni konkrétnej metódy akcie. Poradie ich vykonávania v pipeline je určené ich typom.