Ինչպե՞ս եք կիրառում ֆիլտրերը C#-ի pipeline-ներում: Կարող եք տալ օգտագործման օրինակներ?
sobes.tech AI
Պատասխան AI-ից
Ֆիլտրերը C# կոնվեյերներում օգտագործվում են տարբեր փուլերում հարցում կամ առաջադրանքի կատարման միջամտելու և բռնելու համար: ASP.NET Core վեբ հավելվածների համատեքստում նրանք թույլ են տալիս ավելացնել տրամաբանություն գործողության մեթոդների կատարման առաջ, հետո կամ ընթացքում, ինչպես նաև հարցումների մշակման այլ մակարդակներում:
ASP.NET Core-ում ֆիլտրերի օգտագործման օրինակներ:
-
Անվտանգություն և թույլտվություն (Authentication/Authorization Filters): Նշում է, արդյոք օգտվողը իրավունք ունի կատարել որոշակի գործողություն:
// Օրինակ Authorize ատրիբուտ [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Ռեսուրսների ֆիլտրեր (Resource Filters): Կատարվում են առաջին հերթին թույլտվության ֆիլտրերից հետո: Կարող են իրականացնել կեշավորում կամ ընդհատել կոնվեյերը:
// Օրինակ ռեսուրսների ֆիլտր՝ կեշավորման համար public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Լոգիկա գործողության առաջ } public void OnResourceExecuted(ResourceExecutedContext context) { // Լոգիկա գործողության հետո, բայց պատասխան գրառելուց առաջ } } -
Գործառույթների ֆիլտրեր (Action Filters): Կատարվում են գործողության մեթոդի առաջ և հետո: Հարմար են տվյալների վավերացման, գրառման կամ արդյունքների փոփոխության համար:
// Օրինակ Action Filter՝ գրառման համար public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Լոգիկա գործողության առաջ Console.WriteLine($"Executing action: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Լոգիկա գործողության հետո Console.WriteLine($"Executed action: {context.ActionDescriptor.DisplayName}"); } } // Օգտագործում Action Filter-ը կոնտրոլլերի մեթոդի վրա [LogActionFilter] public IActionResult About() { return View(); } -
Անվտանգության ֆիլտրեր (Exception Filters): Հաշվարկում են անօգտագործված արտահայտությունները, որոնք առաջանում են Action մեթոդի կամ այլ ֆիլտրերի կատարման ընթացքում:
// Օրինակ Exception Filter՝ սխալների մշակման համար public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Սխալի մշակման լոգիկա context.Result = new ContentResult() { Content = "An error occurred.", StatusCode = 500 }; context.ExceptionHandled = true; // Նշում է, որ արտահայտությունը մշակված է } } // Օգտագործում Exception Filter-ը կոնտրոլլերի վրա [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("Something went wrong!"); } } -
Արդյունքների ֆիլտրեր (Result Filters): Կատարվում են գործողության արդյունքի մեթոդի առաջ և հետո (օրինակ, առաջ կամ հետո ViewResult, JsonResult և այլն):
// Օրինակ Result Filter՝ արդյունքի փոփոխության համար public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Լոգիկա արդյունքի մեթոդի առաջ Console.WriteLine($"Executing result type: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Լոգիկա արդյունքի մեթոդի հետո Console.WriteLine($"Executed result type: {context.Result.GetType().Name}"); } }
Ֆիլտրերը կարող են կիրառվել գլոբալ (բոլոր հարցումների համար), կոնտրոլլերի մակարդակով կամ կոնկրետ գործողության մեթոդի մակարդակով: Դրանց կատարման կարգը կոնվեյերում որոշվում է նրանց տեսակի միջոցով։