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 datusHttpContext.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
OnActionExecutinglaikā.
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
AuthorizationunAuthenticationfiltrus).
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!");
}
}