Sobes.tech
Middle

Wat is een actiefilter en welke functies voert hij uit?

sobes.tech AI

Antwoord van AI

Action-filters in ASP.NET Core zijn een specifiek type filters die de uitvoering van de actie-methode van de controller onderscheppen.

Belangrijkste functies:

  • Voor de uitvoering van de actie: Voeren code uit voordat de actie-methode van de controller wordt aangeroepen (OnActionExecuting).
  • Na de uitvoering van de actie: Voeren code uit nadat de actie-methode van de controller is aangeroepen, maar voordat het resultaat wordt geformatteerd (OnActionExecuted).
  • Wijziging van de context: Kunnen de uitvoeringcontext van de actie (ActionExecutingContext) of de context na uitvoering (ActionExecutedContext) wijzigen, bijvoorbeeld door gegevens toe te voegen aan HttpContext.Items, routing te wijzigen of het resultaat van de actie in te stellen.
  • Foutafhandeling: Behandelen geen uitzonderingen direct, maar kunnen worden gebruikt om een foutresultaat in te stellen als er een uitzondering is opgetreden tijdens OnActionExecuting.

Voorbeelden van gebruik:

  • Validatie van verzoekgegevens vóór het aanroepen van de actie.
  • Toevoegen van headers of wijzigen van de response body.
  • Loggen van informatie over het verzoek en de response.
  • Caching van actie-resultaten.
  • Uitvoeren van autorisatie en authenticatie (hoewel hiervoor meestal gespecialiseerde filters zoals Authorization en Authentication worden gebruikt).

Implementatie: Worden gemaakt door te erven van ActionFilterAttribute of door de interfaces IActionFilter (synchron) of IAsyncActionFilter (asynchron) te implementeren.

// Voorbeeld van een eenvoudige synchronisatie action-filter
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Logica vóór de actie wordt uitgevoerd
        Console.WriteLine("Voor de actie-uitvoering");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Logica na de actie-uitvoering
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Wijziging van het resultaat als er geen uitzondering is en het resultaat ObjectResult is
            Console.WriteLine($"Statuscode van het actie-resultaat: {objectResult.StatusCode}");
        }
        Console.WriteLine("Na de actie-uitvoering");
        base.OnActionExecuted(context);
    }
}

Worden toegepast op controllers of specifieke actie-methoden via attributen:

[CustomActionFilter] // Toepassing op controller
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Toepassing op actie-methode
    public IActionResult Index()
    {
        return Ok("Hallo van Index!");
    }
}