Middle
Čo je Action filter a aké funkcie plní?
sobes.tech AI
Odpoveď od AI
Akčné filtre v ASP.NET Core — je špecifický typ filtrov, ktorý zachytáva vykonávanie metódy akcie kontroléra.
Hlavné funkcie:
- Pred vykonaním akcie: Vykonávajú kód pred volaním metódy akcie (
OnActionExecuting). - Po vykonaní akcie: Vykonávajú kód po tom, čo bola metóda akcie volaná, ale pred formátovaním výsledku (
OnActionExecuted). - Modifikácia kontextu: Môžu meniť kontext vykonávania akcie (
ActionExecutingContext) alebo kontext po vykonaní (ActionExecutedContext), napríklad pridávaním dát doHttpContext.Items, zmenou routingu alebo nastavovaním výsledku akcie. - Spracovanie výnimiek: Priamo nespracovávajú výnimky, ale môžu byť použité na nastavenie výsledku v prípade chyby, ak došlo k výnimke počas
OnActionExecuting.
Príklady použitia:
- Validácia dát požiadavky pred volaním akcie.
- Pridanie hlavičiek alebo modifikácia tela odpovede.
- Logovanie informácií o požiadavke a odpovedi.
- Cacheovanie výsledkov akcie.
- Vykonávanie autorizácie a autentifikácie (hoci na to sa častejšie používajú špecializované filtry
AuthorizationaAuthentication).
Implementácia: Sú vytvárané dedičstvom od ActionFilterAttribute alebo implementáciou rozhraní IActionFilter (synchronný) alebo IAsyncActionFilter (asynchrónny).
// Príklad jednoduchého synchronného akčného filtra
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Logika pred vykonaním akcie
Console.WriteLine("Pred vykonaním akcie");
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Logika po vykonaní akcie
if (context.Exception == null && context.Result is ObjectResult objectResult)
{
// Modifikácia výsledku, ak nie je výnimka a výsledok je ObjectResult
Console.WriteLine($"Stavový kód výsledku akcie: {objectResult.StatusCode}");
}
Console.WriteLine("Po vykonaní akcie");
base.OnActionExecuted(context);
}
}
Používajú sa na kontroléroch alebo samostatných metódach akcií pomocou atribútov:
[CustomActionFilter] // Použitie na kontroléri
public class HomeController : Controller
{
[HttpGet]
[CustomActionFilter] // Použitie na metóde akcie
public IActionResult Index()
{
return Ok("Ahoj z Index!");
}
}