Sobes.tech
Middle+

Ինչպե՞ս եք կիրառում ֆիլտրերը C#-ի pipeline-ներում: Կարող եք տալ օգտագործման օրինակներ?

sobes.tech AI

Պատասխան AI-ից

Ֆիլտրերը C# կոնվեյերներում օգտագործվում են տարբեր փուլերում հարցում կամ առաջադրանքի կատարման միջամտելու և բռնելու համար: ASP.NET Core վեբ հավելվածների համատեքստում նրանք թույլ են տալիս ավելացնել տրամաբանություն գործողության մեթոդների կատարման առաջ, հետո կամ ընթացքում, ինչպես նաև հարցումների մշակման այլ մակարդակներում:

ASP.NET Core-ում ֆիլտրերի օգտագործման օրինակներ:

  1. Անվտանգություն և թույլտվություն (Authentication/Authorization Filters): Նշում է, արդյոք օգտվողը իրավունք ունի կատարել որոշակի գործողություն:

    // Օրինակ Authorize ատրիբուտ
    [Authorize]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
    
  2. Ռեսուրսների ֆիլտրեր (Resource Filters): Կատարվում են առաջին հերթին թույլտվության ֆիլտրերից հետո: Կարող են իրականացնել կեշավորում կամ ընդհատել կոնվեյերը:

    // Օրինակ ռեսուրսների ֆիլտր՝ կեշավորման համար
    public class CacheResourceFilter : IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            // Լոգիկա գործողության առաջ
        }
    
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            // Լոգիկա գործողության հետո, բայց պատասխան գրառելուց առաջ
        }
    }
    
  3. Գործառույթների ֆիլտրեր (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();
    }
    
  4. Անվտանգության ֆիլտրեր (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!");
        }
    }
    
  5. Արդյունքների ֆիլտրեր (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}");
        }
    }
    

Ֆիլտրերը կարող են կիրառվել գլոբալ (բոլոր հարցումների համար), կոնտրոլլերի մակարդակով կամ կոնկրետ գործողության մեթոդի մակարդակով: Դրանց կատարման կարգը կոնվեյերում որոշվում է նրանց տեսակի միջոցով։