SEO (Arama Motoru Optimizasyonu) Mikro İnteraktif ÜCRETSİZ - Google Play'den İndirin

Asp.Net Core ile Middleware Örneği

.Net Core ile yapılan bir isteğin sonuçlanmasından önce araya girilip çeşitli müdahaleler etmemize yarayan Middleware yapısını inceleyelim.

Asp.Net Core ile hayatımıza giren farklı bir kavram olan Middleware. Bu kavramı şu şekilde düşünebilirsiniz; ziyaretçi tarayıcıya www. şeklindeki adresi yazar ve bir İstek (Request) sonrasında sunucu tarafına gelen bu talep işlenir. İşlenen istekler derlenip toparlandıkdan sonra ziyaretçinin tarayıcısına bir Yanıt (Response) gönderilir. Middleware (Ara Katman) işlemi bu İstek (Request) ile Yanıt (Response) kavramlarının arasına girmek için var.
Örnek Bir Request - Response Yapısı
Asp.Net Core ile Middleware Örneği

Yani hikayemiz giriş ve sonuçtan oluşuyorken buna ekstra olarak gelişme bölümü eklemiş olacağız. Ve böylece hikayemiz giriş-gelişme-sonuç bölümlerinden oluşmuş olacaktır. Öncelik olarak bir tane .Net Core projesi oluşturalım.

Benim çalışma dizinim şu şekilde: "D:\calisma-masasi\dotnetcore\ornekler" şimdi bu dizine CMD (Komut satırı) ile gidip .Net Core MVC projesi oluşturalım.
AspNetCoreMiddleware Projesini Oluşturalım
dotnet new mvc --name=AspNetCoreMiddleware

Proje oluşturmak için CMD ekranında bu satırları yazdık, kısa bir süre sonra projemiz oluşmuş olacaktır.
AspNetCoreMiddleware Projesini Oluşturalım
Asp.Net Core ile Middleware Örneği

Komut satırından AspNetCoreMiddleware projemizi oluşturduk. Projeye ait ekran görüntüsünü paylaşalım.
AspNetCoreMiddleware Proje Gösterimi
Asp.Net Core ile Middleware Örneği

Çalışma alanımız oluştu. Visual Studio Code ile çalışma alanımızdan devam etmek için CMD üzerinden
"D:\calisma-masasi\dotnetcore\ornekler\AspNetCoreMiddleware" dizinine gidip CMD ekranında
Projeyi VS Code ile Açalım
code .
şeklinde yazıp VS Code ekranından projemize devam edelim.

Projemiz açıldı. Şimdi burada yapmamız gereken bir tane class oluşturmak. Ardından bu class'ın constructor (yapıcı) metodunda HttpContext'i enjekte (inject) ederek class içerisinde başlangıçtan itibaren HttpContext değerlerinin gelmesini sağlamış olacağız.
Loglama için Gereken RequestDelegate
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;

namespace AspNetCoreMiddleware
{
    public class LoglamaIslemiMiddleware
    {
        private readonly RequestDelegate _rdIstek;
        public LoglamaIslemiMiddleware(RequestDelegate rdIstek)
        {
            _rdIstek = rdIstek;
        }
        public async Task Invoke(HttpContext httpContext)
        {
            string strIp = httpContext.Connection.RemoteIpAddress.ToString();
            string strTarayiciBilgileri = httpContext.Request.Headers["User-Agent"];
            string strRequestScheme = httpContext.Request.Scheme;
            string strRequestHost = httpContext.Request.Host.ToString();
            string strRequestPath = httpContext.Request.Path;
            string strRequestQueryString = httpContext.Request.QueryString.ToString();
            string strPatika = "D:/calisma-masasi/dotnetcore/ornekler/AspNetCoreMiddleware/log.txt";
            using (StreamWriter swYazici = System.IO.File.AppendText(strPatika))
            {
                swYazici.WriteLine("#### Request (BASLANGIC) ####");
                swYazici.WriteLine("Ip Adresi: " + strIp);
                swYazici.WriteLine("Tarayıcı Bilgileri: " + strTarayiciBilgileri);
                swYazici.WriteLine("Request.Scheme: " + strRequestScheme);
                swYazici.WriteLine("Request.Host: " + strRequestHost);
                swYazici.WriteLine("Request.Path: " + strRequestPath);
                swYazici.WriteLine("Request.QueryString: " + strRequestQueryString);
                swYazici.WriteLine("Tarih: " + DateTime.Now);
                swYazici.WriteLine("#### Request (BITIS) ####");
                swYazici.WriteLine("\n");
            }
            await _rdIstek.Invoke(httpContext);
        }
    }
}

Hazırlamış olduğumuz LoglamaIslemiMiddleware classı için AraKatmanExtension adlı extension sınıf hazırlayalım.
AraKatmanExtension
using Microsoft.AspNetCore.Builder;
namespace AspNetCoreMiddleware
{
    public static class AraKatmanExtension
    {
        public static IApplicationBuilder AraKatmanlar(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<LoglamaIslemiMiddleware>();
        }
    }
}

.Net Core ile birlikte gelen Startup.cs içerisinde yazmış olduğumuz bu AraKatmanlar adlı static metodu register ederek Request ile Response arasına girerek istediğimiz işlemleri gerçekleştirmiş olacağız.
Startup.cs İçerisinde Metodumuzu Register Edelim
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //.... Diğer register edilmesi gerekenler.
    app.AraKatmanlar();
}

Projemizi çalıştıralım.
Projemizin Çalışması
Asp.Net Core ile Middleware Örneği

Projemiz çalıştı. Sayfalar arası geçiş yapıp log.txt dosyasına verilerin yazılmasını sağladıktan sonra log.txt dosyasını açıp yazılan bilgileri kontrol edelim.
Logları Kontrol Edelim
Asp.Net Core ile Middleware Örneği

Sayfa yüklenmeye başladığı an itibariyle ziyaretçiye gönderilecek her şeyi görebilmekteyiz. "CSS, JavaScript vb.." gibi dosyalar.
Middleware'ın avantajlarını kapanış olarak vermek gerekirse:
- Loglama için her ActionResult'a girip tek tek kod yazmaya gerek kalmaz.
- Hata yönetimi için basit düzeyde tek yerden yönetilebilirlik.
- Kısıtlama işlemi.
- Sayfa bazlı özel gösterimler vb..
Bu örnekler daha da arttırılabilir. Kısa bir şekilde işin mantığını sizlere aktarmaya çalıştık.
Middleware projesini Github üzerinden indirmek için tıklayınız.

Yorumlar

Yorum Yaz

Avatar

REKLAM

DDos Koruma, Botnet Koruma, Layer 7 Saldırı koruması, Sanal sunucu, Vds sunucu

REKLAM

Çizgi Filmler

REKLAM

Çocuk Etkinlikleri Uygulaması

EN

  • Popüler
  • Yeni
  • Son Yorum