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-ից!");
}
}