ASP.NET Core Middleware kullanımı

Cover Image for ASP.NET Core Middleware kullanımı

ASP.NET Core'daki ara yazılım (Middleware), istemci(Client) tarafından iletilen istekleri(Request) ve yanıtları(Response) işlemek için uygulama hattında özel olarak düzenlenen yazılım bileşenleridir. Her bileşen, gelen isteği değiştirmeyi ve isteğin bir sonraki bileşene geçmesine izin vermeyi seçebilir veya belirli uygulama mantığına dayalı olarak hemen bir yanıt döndürebilir.

HTTP Modülleriyle karşılaştırıldığında, Ara yazılım (Middleware), yalnızca belirli bir imzaya sahip bir işlev olan RequestDelegates'i kullanarak işlemi büyük ölçüde basitleştirir.

Ara Yazılım (Middleware) Yazma

İki şekilde middleware yazabiliriz: satır içinde IApplicationBuilder kullanarak veya bağımsız bir sınıf (class) oluşturarak.

IApplicationBuilder e .Use() ve .Run() extension methotlarını kullanarak satır içinde Middleware kullanabiliriz

En temel haliyle bir satır içi Ara Yazılım örneği. Bu parça tüm istekleri yerine getirir ve basitçe "Merhaba Dünya"yı döndürür:

public void Configure(IApplicationBuilder app)  
{
    app.Run(async ctx => await ctx.Response.WriteAsync("Merhaba Dünya!"));
}

Satır içi ara yazılım(middleware) başka bir örneği .Use():

public void Configure(IApplicationBuilder app)  
{
    app.Use(async (ctx, next) =>
    {
        await next.Invoke();
    });

    app.Use(async (ctx, next) =>
    {
        await next.Invoke();
    });

    app.Run(async ctx => await ctx.Response.WriteAsync("Merhaba Dünya!"));
}

.Run() methodunun en son çağrıldığına dikkat edin . Bu pipeline hattını sonlandırır.

Middleware yazmanın diğer yolu sınıfları kullanmaktır. Ara yazılım sınıflarının belirli bir formata sahip olması gerekir: Yapıcıda(constructor) RequestDelegate ilk parametre olarak alınmalı, Invoke() methodunda HttpContext parametrik olarak alın.

Örneğin:

public class HarikaMiddleware  
{
    private readonly RequestDelegate _next;

    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext httpContext, IMyScopedService svc)
    {
        //burda işler harika olacak
        await _next(httpContext);
    }
}

Ara yazılım aşağıdaki gibi IApplicationBuilder kullanılarak uygulamaya dahil edilmesi gerekir :

public void Configure(IApplicationBuilder app)  
{
    app.UseMiddleware<AwesomeMiddleware>();

    app.Run(async ctx => await ctx.Response.WriteAsync("Hello World"));

Ara yazılım (Middleware)

Temel olarak ASP.NET Core'daki her şey Middleware'dir. Bu kavramı anlarsanız, bu zaten kazanılmış bir savaşın yarısıdır.