DEV Community

MustafaSamedYeyin
MustafaSamedYeyin

Posted on

Asp.net core Middleware; Run, Use Giriş.

Asp.net core'da Run, Use middleware'ini inceleyelim.

1.) Run middleware'i nedir ?

  • Run middleware'i kendinden sonra gelen middleware'leri çalışmasını engeller.
  • Run middleware'i short circuit yani kısa devre middleware'idir.

Örnek :

a.) Boş bir model-view-controller projesi oluşturalım.

b.) Startup.cs class'ına Configure içinde app.UseStaticFiles(); dan sonraya aşağıdaki kodları ekleyelim :

  app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu middleware den sonrasi calismayacak.");
            });
Enter fullscreen mode Exit fullscreen mode

c.) Uygulamayı çalıştıralım :

Image description

Görüldüğü üzere Run metodu kendisinden sonraki middleware çalıştırmıyor.

d.) Run middleware'inin aşağısına bir tane daha Run middleware'i ekleyelim :

 app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu middleware2 den sonrasi calismayacak.");
            });
Enter fullscreen mode Exit fullscreen mode

Configure metodumuz şimdi şöyle gözükmelidir :

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu middleware den sonrasi calismayacak.");
            });

            app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu middleware2 den sonrasi calismayacak.");
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

Enter fullscreen mode Exit fullscreen mode

e.) Uygulamayı çalıştıralım :

Image description

Gördüğünüz üzere ikinci Run middleware'i çalışmadı çünkü: Birinci Run middleware'i kısa devre(short circuit) yapıp pipeline akışını kesti.

2.) Use Middleware'i :

  • Use Middleware'i kendinden sonra gelen middleware çağırabilir, ve pipeline geriye döndüğünde next(); metodundan sonra yine farklı kodlar çalıştırabilir.

Örnek :

a.) Configure metodumuzu aşağıdaki gibi değiştirelim

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

            app.Use(async (context, next) =>
            {
                await context.Response.WriteAsync(Environment.NewLine+"Bu middleware Use middleware'idir pipelini going" + Environment.NewLine);
                await next();
                await context.Response.WriteAsync(Environment.NewLine + "Bu middleware Use middleware'idir pipelini incoming/n" + Environment.NewLine);


            });
            app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu Run middleware den sonraski middleware calismayacak. Ve geriye donuyor..");
            });

            app.Run(async context =>
            {
                await context.Response.WriteAsync("Bu middleware2 den sonrasi calismayacak.");
            });

Enter fullscreen mode Exit fullscreen mode

b.) Uygulamayı çalıştıralım :

Image description

Gördüğünüz üzere ilkbaşta app.Use ile ekrana
await next();
öncesindeki response değerini yazdırdık. Daha sonra :
await next();
diyerek bir sonraki middleware olan Run middleware'ini çalıştırdık.
Run middleware'de response yazı yazdırdı ve kısa devre yaptı ikinci olan Run metoduna düşmedi.
Kısa devre yaptıktan sonra akış geriye doğru akmaya başladı ve Use middleware'in
await next();
metodundan sonraki response ile dilediğimiz yazıyı yazdırdık.

Not : Anlayacağınız üzere akış aşağıdaki gibi ilk middleware'den başlar ve sonra tekrar geriye doğru giderek yine ilk middleware ile son bulur :

Image description

Bir dahaki yazımda Map ve MapWhen middleware'lerini inceleyeceğiz.

En iyi dileklerim ile.

Mustafa Samed Yeyin.

Top comments (0)