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-დან!");
    }
}