ASP.NET Core Filters

Fatih MUTLU
Feb 18, 2025

ASP.NET Core'da filters (filtreler), HTTP isteklerini işlemek ve yanıtları oluşturmak için kullanılan bileşenlerdir. Filtreler, ASP.NET Core uygulamanızda belirli bir mantığı merkezi bir şekilde uygulamak için kullanılır. Bu mantık, kullanıcı kimlik doğrulaması, yetkilendirme, hata işleme, önbellekleme gibi işlemleri içerebilir.

ASP.NET Core’da 5 ana filter türü vardır:

##1. Authorization Filters (Yetkilendirme Filtreleri) Authorization filter’ları, kullanıcının belirli bir kaynağa erişimini denetlemek için kullanılır. Genellikle, [Authorize] attribute'u ile entegre çalışır.

filters

Örnek:

public class MyController : Controller
{
    [Authorize]
    public IActionResult SecureData()
    {
        return View();
    }
}

2. Action Filters (Eylem Filtreleri)

Action filter’ları, bir aksiyon metodunun öncesinde veya sonrasında çalıştırılabilir. Bu filtreler, verileri düzenlemek, ön işleme yapmak veya yanıt oluşturulmadan önce ekstra işlemler yapmak için kullanılır.

Örnek:

public class MyActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        // Aksiyon çağrılmadan önce yapılacak işlemler
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // Aksiyon çağrıldıktan sonra yapılacak işlemler
    }
}

3. Result Filters (Sonuç Filtreleri)

Result filter’ları, bir aksiyon metodunun sonucunun oluşturulmasından önce ve sonra çalıştırılır. Yanıt içeriğini değiştirmek veya ek işlevsellik eklemek için kullanılır.

Örnek:

public class MyResultFilter : IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext context)
    {
        // Sonuç oluşturulmadan önce yapılacak işlemler
    }

    public void OnResultExecuted(ResultExecutedContext context)
    {
        // Sonuç oluşturulduktan sonra yapılacak işlemler
    }
}

4. Exception Filters (Hata Filtreleri)

Exception filter’ları, bir aksiyon metodunda bir hata oluştuğunda devreye girer. Bu filtreler, hata yönetimi ve hata sayfalarını özelleştirmek için kullanılır.

Örnek:

public class MyExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        // Hata işleme
        context.ExceptionHandled = true;
        context.Result = new JsonResult(new { error = "Bir hata oluştu" });
    }
}

5. Resource Filters (Kaynak Filtreleri)

Resource filter’ları, aksiyon metodu çağrılmadan önce çalıştırılır ve kaynak erişimiyle ilgili ön işlemler yapar. Bu filtreler, genellikle önbellekleme gibi senaryolarda kullanılır.

Örnek:

public class MyResourceFilter : IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        // Kaynak erişimi öncesi işlemler
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
        // Kaynak erişimi sonrası işlemler
    }
}

Filtrelerin Kullanımı

Filtreler, genellikle bir Controller veya Action üzerinde kullanılır, ancak aynı zamanda uygulama genelinde de tanımlanabilir. Aşağıda bir filtreyi Controller veya Action üzerinde kullanma örneği yer almaktadır:

[ServiceFilter(typeof(MyActionFilter))]
public class MyController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

Ya da global olarak filtreleri kaydetmek için Startup.cs dosyasını kullanabilirsiniz:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews(options =>
    {
        options.Filters.Add(new MyActionFilter());
    });
}

Filtrelerin Sıralanması

ASP.NET Core'da filtreler belirli bir sırayla çalışır. Filtrelerin çalışma sırası şu şekildedir:

Authorization Filters Resource Filters Action Filters Result Filters Exception Filters Bu sıralama, filtrelerin ne zaman çalıştırılacağını ve nasıl bir işlem sırasına sahip olacağını belirler.

Özet

ASP.NET Core’da filtreler, uygulamanın çeşitli aşamalarında işlem yapmak için kullanılır. Authorization, action, result, exception ve resource filtreleri ile HTTP isteklerinizi özelleştirebilir ve daha yönetilebilir hale getirebilirsiniz. Filtrelerin doğru bir şekilde kullanılması, uygulamanızın kod yapısını düzenler ve tekrar kullanılabilirliği artırır.

February 18, 2025