Sobes.tech
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 OnActionExecuting mə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!");
    }
}