Sobes.tech
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 a HttpContext.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 OnActionExecuting szakaszban.

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