Sobes.tech
Middle

Kas ir Action filtrs un kādas funkcijas tas veic?

sobes.tech AI

Atbilde no AI

Darbības filtri ASP.NET Core — tas ir specifisks filtru veids, kas noķer darbības metodes izpildi.

Galvenās funkcijas:

  • Pirms darbības: izpilda kodu pirms darbības metodes izsaukšanas (OnActionExecuting).
  • Pēc darbības: izpilda kodu pēc tam, kad darbības metode ir izsaukta, bet pirms rezultāta formatēšanas (OnActionExecuted).
  • Konteksta modifikācija: var mainīt darbības izpildes kontekstu (ActionExecutingContext) vai pēc izpildes kontekstu (ActionExecutedContext), piemēram, pievienojot datus HttpContext.Items, mainot maršrutēšanu vai iestatot darbības rezultātu.
  • Izņēmumu apstrāde: tieši neapstrādā izņēmumus, bet var tikt izmantoti kļūdu rezultāta iestatīšanai, ja notikusi izņēmuma izsaukšana OnActionExecuting laikā.

Piemēri:

  • Datu validācija pirms darbības izsaukšanas.
  • Atbildes galvenes vai ķermeņa modifikācija.
  • Pieprasījuma un atbildes informācijas reģistrēšana.
  • Rezultātu kešatmiņa.
  • Autorizācijas un autentifikācijas izpilde (lai gan biežāk izmanto specializētus Authorization un Authentication filtrus).

Realizācija: tiek izveidoti, mantojot no ActionFilterAttribute vai realizējot IActionFilter (sinhronais) vai IAsyncActionFilter (asinhronais) interfeisu.

// Vienkāršs sinhrons darbības filtra piemērs
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Kods pirms darbības
        Console.WriteLine("Pirms darbības izpildes");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Kods pēc darbības
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Rezultāta modifikācija, ja nav kļūdu un rezultāts ir ObjectResult
            Console.WriteLine($"Darbības rezultāta statusa kods: {objectResult.StatusCode}");
        }
        Console.WriteLine("Pēc darbības");
        base.OnActionExecuted(context);
    }
}

Pielietojums kontrolieriem vai atsevišķiem darbības metodēm ar atribūtiem:

[CustomActionFilter] // Pielietojums kontrolierim
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Pielietojums darbības metodei
    public IActionResult Index()
    {
        return Ok("Sveiki no Index!");
    }
}