Kako primenjujete filtere u pipeline-ima u C#? Možete li navesti primere njihove upotrebe?
sobes.tech АИ
Одговор од АИ
Филтери у C# pipeline-има се користе за пресретање и интервенцију у различитим фазама обраде захтева или извршавања задатка. У ASP.NET Core веб апликацијама, они омогућавају додавање логике пре, после или током извршавања метода контролера, као и на другим нивоима обраде захтева.
Примери коришћења филтера у ASP.NET Core:
-
Аутентификација и Ауторизација (Authentication/Authorization Filters): Одређују да ли је корисник овлашћен да изврши одређену акцију.
// Пример атрибута Authorize [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Филтери ресурса (Resource Filters): Извршавају се први након филтера ауторизације. Могу вршити кеширање или прекинути pipeline.
// Пример Resource филтра за кеширање public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Логика пре извршавања методе акције } public void OnResourceExecuted(ResourceExecutedContext context) { // Логика након извршавања методе акције, али пре записивања одговора } } -
Филтери акција (Action Filters): Извршавају се пре и после извршавања методе акције контролера. Погодни су за валидацију података, логовање или модификацију параметара и резултата.
// Пример филтра за логовање public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Логика пре извршавања акције Console.WriteLine($"Извршавање акције: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Логика након извршавања акције Console.WriteLine($"Акција извршена: {context.ActionDescriptor.DisplayName}"); } } // Примена филтра акције на методу контролера [LogActionFilter] public IActionResult About() { return View(); } -
Филтери изузетака (Exception Filters): Обрађују необрађене изузетке који настану током извршавања методе акције или других филтера.
// Пример Exception филтра за обраду грешака public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Логика обраде изузетка context.Result = new ContentResult() { Content = "Дошло је до грешке.", StatusCode = 500 }; context.ExceptionHandled = true; // Наводи да је изузетак обрађен } } // Примена Exception филтра на контролер [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Нешто није у реду!"); } } -
Филтери резултата (Result Filters): Извршавају се пре и после извршавања методе резултата акције (нпр. пре или после извршавања ViewResult, JsonResult итд.).
// Пример Result филтра за модификацију резултата public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Логика пре извршавања метода резултата Console.WriteLine($"Тип резултата: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Логика након извршавања метода резултата Console.WriteLine($"Тип извршеног резултата: {context.Result.GetType().Name}"); } }
Филтри могу бити примењени глобално (за све захтеве), на нивоу контролера или на нивоу конкретне методе. Поредак њиховог извршавања у pipeline-у одређује њихов тип.