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ğinHttpContext.Items'a veri ekleyerek, yönlendirmeyi değiştirerek veya eylem sonucunu ayarlayarak. - İstisna işleme: Doğrudan istisnaları işlemezler, ancak
OnActionExecutingaş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!");
}
}