Sobes.tech
Middle

Ի՞նչ է Action ֆիլտրն ու ինչ գործառույթներ է իրականացնում։

sobes.tech AI

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

Action ֆիլտրերը ASP.NET Core-ում — դա հատուկ տեսակի ֆիլտրեր են, որոնք բռնում են գործողության մեթոդի կատարմանը:

Հիմնական գործառույթներ՝

  • Նախքան գործողության կատարմանը: Կատարում են կոդ այն ժամանակ, երբ չի կանչվել գործողության մեթոդը (OnActionExecuting):
  • Հետո գործողության կատարմանը: Կատարում են կոդ այն ժամանակ, երբ գործողության մեթոդը կանչվել է, բայց մինչ արդյունքի ձևաչափումը (OnActionExecuted):
  • Կոնտեքստի փոփոխում: Կարող են փոխել գործողության կատարման կոնտեքստը (ActionExecutingContext) կամ հետո կատարման կոնտեքստը (ActionExecutedContext), օրինակ՝ ավելացնել տվյալներ HttpContext.Items-ում, փոխել երթուղին կամ սահմանել գործողության արդյունքը:
  • Անհատականացման սխալների մշակումը: Չեն մշակել ուղղակի սխալներ, բայց կարող են օգտագործվել սխալների արդյունքը սահմանելու համար, եթե սխալը տեղի է ունեցել OnActionExecuting փուլում:

Օգտագործման օրինակներ՝

  • Դատարկման տվյալների վավերացում գործողության կանչից առաջ:
  • Պատասխանին վերնագրեր կամ բովանդակություն ավելացնել:
  • Հարցման և պատասխանների մասին տեղեկատվություն գրանցել:
  • Արդյունքների կեշավորում:
  • Աուտորիզացիա և աութենտիկացիա իրականացնել (հատկապես այս նպատակով հաճախ օգտագործվում են հատուկ Authorization և Authentication ֆիլտրեր):

Իմպլեմենտացիա՝ActionFilterAttribute-ից ժառանգությամբ կամIActionFilter(սինխրոն) կամIAsyncActionFilter` (ասինխրոն) ինտերֆեյսների իրականացման միջոցով:

// Պարզ սինխրոն Action ֆիլտրի օրինակ
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Կոդ գործողության առաջ
        Console.WriteLine("Առաջին գործողության նախապատրաստում");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Կոդ գործողության հետո
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Արդյունքի փոփոխում, եթե սխալ չկա և արդյունքը ObjectResult է
            Console.WriteLine($"Գործողության արդյունքի կարգավիճակի կոդը: {objectResult.StatusCode}");
        }
        Console.WriteLine("Գործողության ավարտ");
        base.OnActionExecuted(context);
    }
}

Օգտագործում՝` کنترلերների կամ գործողության մեթոդների վրա՝ որպես ագրեգատ:

[CustomActionFilter] // Կոնտրոլերի վրա
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Գործողության մեթոդի վրա
    public IActionResult Index()
    {
        return Ok("Բարև, Index-ից!");
    }
}