Run, Use, Map, MapWhen adlı middleware'leri gördük.
Şimdi aşağıdaki middleware'leri inceleyelim :
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.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
Gördüğünüz üzere app.Use... diye devam ediyor. Peki biz böyle bir middleware'i nasıl oluştururabiliriz ?
Hadi hemen Örneğe geçelim, bir model-view-controller uygulaması yaratalım ve aşağıdaki adımlar ile devam edelim :
a.) Aşağaıdaki gibi Extensions ve Middlewares adlı klasör oluşturalım. Extensions içine MiddlewareExtensions adlı class'ı yaratalım. Middlewares adlı klasör içine PathYakalaMiddleware adlı class'ı yaratalım.
b.) PathYakalaMiddleware class'ı aşağıdaki gibi olmalıdır.
public class PathYakalaMiddleware
{
RequestDelegate _next;
public PathYakalaMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext)
{
Console.WriteLine(httpContext.Request.Path); //Burada httpContext nesnesi üzerinden istek yapılan path'i console'a loglluyoruz.
await _next(httpContext); // burada RequestDelegate üzerinden bu middleware'den sonra diğer middleware çağrılmasını istiyoruz. Eğer bu await _next(httpContext); bu ifadeyi kullanmaz isek uygulamımız short circuit yapar ve bir dahaki middleware uygulama geçemez.
Console.WriteLine("Yukarıdaki Path Yakalandı"); // pipeline geriye doğru akmaya başladığında bu mesajı yazdırıyoruz.
}
}
b.) MiddlewareExtensions class'ımız ile IApplicationBuilder'a extension yazıyoruz.
static public class MiddlewareExtensions
{
public static IApplicationBuilder UsePathLogger(this IApplicationBuilder applicationBuilder)
{
return applicationBuilder.UseMiddleware<PathYakalaMiddleware>();
}
}
applicationBuilder.UseMiddleware<....>(); ile .... olan yere custom middleware'imizi yani PathYakalaMiddleware veriyoruz.
c.) UseRouting middleware'inden sonra UsePathLogger adlı yazdığımız extension metodumuzu Startup.cs içersindeki Configure metoduna verelim.
app.UseRouting();
app.UsePathLogger();
Not: Configure metodmuz aşağıdakine benzer olmalıdır :
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.UseRouting();
app.UsePathLogger(); // burayı ekledik
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
d.) Şimdi "dotnet run" ile uygulamamızı çalıştıralım.
Ve
https://localhost:5001/
adlı yere rastgele path'ler verlim örneğin :
https://localhost:5001/rastgeleBirPath
Terminale şimdi bakalım :
Gördüğünüz üzere girdiğimiz path'ler console'da loglanıyor.
Siz de kendi ihtiyaçlarınıza göre yeni middleware yazabilirsiniz.
Bir dahaki yazıda görüşmek dileğiyle.
En iyi dileklerim ile.
Mustafa Samed Yeyin.
Top comments (0)