Middle
Mi az az Action szűrő és milyen funkciókat lát el?
sobes.tech MI
Válasz az MI-től
Az ASP.NET Core-ban az Action-szűrők olyan speciális szűrők, amelyek közbeavatkoznak a vezérlő akciómetódusának végrehajtásába.
Fő funkciók:
- Az akció végrehajtása előtt: Kódot futtatnak, mielőtt a vezérlő akciómetódusát meghívnák (
OnActionExecuting). - Az akció végrehajtása után: Kódot futtatnak, miután a vezérlő akciómetódusát meghívták, de mielőtt az eredményt formáznák (
OnActionExecuted). - Környezet módosítása: Megváltoztathatják az akció végrehajtási környezetét (
ActionExecutingContext) vagy a végrehajtás utáni környezetet (ActionExecutedContext), például adatok hozzáadása aHttpContext.Items-hez, az útvonal módosítása vagy az akció eredményének beállítása. - Kivételkezelés: Nem kezelik közvetlenül a kivételeket, de használhatók hiba eredményének beállítására, ha kivétel történt az
OnActionExecutingszakaszban.
Használati példák:
- Kérésadatok validálása az akció hívása előtt.
- Fejlécek hozzáadása vagy a válasz törzsének módosítása.
- Kérés és válasz információinak naplózása.
- Az akció eredményeinek gyorsítótárazása.
- Engedélyezés és hitelesítés végrehajtása (bár ehhez általában specializált engedélyezési és hitelesítési szűrőket használnak).
Implementáció: Az ActionFilterAttribute öröklésével vagy az IActionFilter (szinkron) vagy az IAsyncActionFilter (aszinkron) interfészek megvalósításával készül.
// Egyszerű szinkron akció szűrő példa
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Az akció előtt végrehajtandó logika
Console.WriteLine("Az akció végrehajtása előtt");
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Az akció után végrehajtandó logika
if (context.Exception == null && context.Result is ObjectResult objectResult)
{
// Az eredmény módosítása, ha nincs kivétel és az eredmény ObjectResult
Console.WriteLine($"Az akció eredményének státuszkódja: {objectResult.StatusCode}");
}
Console.WriteLine("Az akció végrehajtása után");
base.OnActionExecuted(context);
}
}
Az attribútumokat a kontrollerekhez vagy az egyes akciómetódusokhoz lehet alkalmazni:
[CustomActionFilter] // Alkalmazás a kontrolleren
public class HomeController : Controller
{
[HttpGet]
[CustomActionFilter] // Alkalmazás az akciómetódusra
public IActionResult Index()
{
return Ok("Helló az Index-ből!");
}
}