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