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