Middle
Hərəkət filtri nədir və hansı funksiyaları yerinə yetirir?
sobes.tech Süni İntellekt
AI-dan cavab
ASP.NET Core-da Action filtrləri, kontrolörün hərəkət metodunun icrasını ələ keçirən xüsusi filtr növüdür.
Əsas funksiyalar:
- Hərəkətə başlamazdan əvvəl: Kontrolörün hərəkət metodunu çağırmadan əvvəl kod icra edirlər (
OnActionExecuting). - Hərəkət icrasından sonra: Kontrolörün hərəkət metodunu çağırdıqdan sonra, lakin nəticənin formatlanmasından əvvəl kod icra edirlər (
OnActionExecuted). - Kontekstin dəyişdirilməsi: Hərəkət icrası kontekstini (
ActionExecutingContext) və ya icra sonrası kontekstini (ActionExecutedContext) dəyişə bilərlər, məsələn,HttpContext.Items-ə məlumat əlavə etmək, marşrutlaşdırmanı dəyişdirmək və ya hərəkət nəticəsini təyin etmək. - İstisna idarəetməsi: Birbaşa istisnaları idarə etmirlər, lakin
OnActionExecutingmərhələsində baş verən istisnə üçün xəta nəticəsini təyin etmək üçün istifadə oluna bilərlər.
İstifadə nümunələri:
- Sorğu məlumatlarının hərəkətdən əvvəl yoxlanması.
- Başlıqları əlavə etmək və ya cavabın bədənini dəyişdirmək.
- Sorğu və cavab haqqında məlumatların qeydiyyatı.
- Hərəkət nəticələrinin keşikdə saxlanması.
- İcazə və autentifikasiya həyata keçirmək (bunun üçün adətən ixtisaslaşdırılmış Authorization və Authentication filtrləri istifadə olunur).
İcrası: ActionFilterAttribute-dən irs alınaraq və ya IActionFilter (sinxron) və ya IAsyncActionFilter (asinxron) interfeyslərini həyata keçirərək yaradılır.
// Sadə və sinxron Action-filtr nümunəsi
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Hərəkət başlamazdan əvvəlki məntiq
Console.WriteLine("Hərəkət icrasından əvvəl");
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Hərəkət icrasından sonra
if (context.Exception == null && context.Result is ObjectResult objectResult)
{
// Nəticə dəyişdirilməsi, əgər istisna yoxdursa və nəticə ObjectResult-dursa
Console.WriteLine($"Hərəkət nəticəsinin status kodu: {objectResult.StatusCode}");
}
Console.WriteLine("Hərəkət icrasından sonra");
base.OnActionExecuted(context);
}
}
Atributlar vasitəsilə kontrolörlərə və ya xüsusi hərəkət metodlarına tətbiq olunur:
[CustomActionFilter] // Kontrolörə tətbiq
public class HomeController : Controller
{
[HttpGet]
[CustomActionFilter] // Hərəkət metoduna tətbiq
public IActionResult Index()
{
return Ok("Index-dən salam!");
}
}