Sobes.tech
Middle

Action filtresi nedir ve hangi fonksiyonları yerine getirir?

sobes.tech yapay zeka

AI'dan gelen yanıt

ASP.NET Core'daki Action filtreleri, kontrolörün eylem metodunun yürütülmesini yakalayan özel bir filtre türüdür.

Ana işlevler:

  • Eylemden önce: Kontrolör eylem metodunun çağrılmasından önce kod çalıştırırlar (OnActionExecuting).
  • Eylemden sonra: Kontrolör eylem metodunun çağrılmasından sonra, ancak sonucu biçimlendirmeden önce kod çalıştırırlar (OnActionExecuted).
  • Bağlamın değiştirilmesi: Eylem yürütme bağlamını (ActionExecutingContext) veya yürütme sonrası bağlamını (ActionExecutedContext) değiştirebilirler, örneğin HttpContext.Items'a veri ekleyerek, yönlendirmeyi değiştirerek veya eylem sonucunu ayarlayarak.
  • İstisna işleme: Doğrudan istisnaları işlemezler, ancak OnActionExecuting aşamasında bir istisna oluşursa hata sonucu ayarlamak için kullanılabilirler.

Kullanım örnekleri:

  • İstek verilerinin doğrulanması.
  • Yanıtın başlıklarını ekleme veya gövdesini değiştirme.
  • İstek ve yanıt bilgilerini kaydetme.
  • Eylem sonuçlarını önbelleğe alma.
  • Yetkilendirme ve kimlik doğrulama işlemleri (bunun için genellikle özel yetkilendirme ve kimlik doğrulama filtreleri kullanılır).

Uygulama: ActionFilterAttribute'den kalıtım yoluyla veya IActionFilter (senkron) veya IAsyncActionFilter (eşzamansız) arayüzlerini implemente ederek oluşturulur.

// Basit ve senkron bir Action filtresi örneği
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Eylemden önceki mantık
        Console.WriteLine("Eylem yürütmeden önce");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Eylemden sonraki mantık
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Hata yoksa ve sonuç ObjectResult ise
            Console.WriteLine($"Eylem sonucu durum kodu: {objectResult.StatusCode}");
        }
        Console.WriteLine("Eylem yürütmesinden sonra");
        base.OnActionExecuted(context);
    }
}

Attributeler aracılığıyla kontrolörlere veya belirli eylem metodlarına uygulanır:

[CustomActionFilter] // Kontrolöre uygulama
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Eylem metoduna uygulama
    public IActionResult Index()
    {
        return Ok("Index'ten merhaba!");
    }
}