Blog Yazısı

ASP.NET MVC'de Controller ve View Olmadan Talep Karşılama: HttpHandler ile Route Oluşturma

ASP.NET MVC'de Controller ve View Olmadan Talep Karşılama: HttpHandler ile Route Oluşturma

ASP.NET MVC'de standart akış, gelen isteğin route tablosu üzerinden bir Controller action'ına yönlendirilip bir View render etmesidir. Ancak her senaryoda bu ağır işleyişe ihtiyaç yoktur: örneğin dinamik olarak üretilen bir resim, XML/JSON çıktısı veya basit bir metin yanıtı döndüren bir uç nokta için Controller-View çiftini kurmak gereksiz yük getirir. Bu gibi durumlarda isteği doğrudan karşılayan hafif bir IHttpHandler uygulaması daha performanslı ve sade bir çözüm sunabilir.

IHttpHandler arayüzü tek bir ProcessRequest(HttpContext context) metodu içerir; bu metot içinde context.Response üzerinden doğrudan çıktı yazılır. Bir handler'ı route sistemine bağlamak için ise IRouteHandler arayüzü uygulanır: public class MyHandler : IHttpHandler { public bool IsReusable => false; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Write("Merhaba"); } } public class MyRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) => new MyHandler(); }

Bu route, RouteConfig.cs içinde routes.Add(new Route("ozel-yol", new MyRouteHandler())) şeklinde tanımlanır. Burada dikkat edilmesi gereken kritik nokta, bu özel route'un varsayılan {controller}/{action}/{id} route'undan ÖNCE kaydedilmesi gerektiğidir; aksi halde istek varsayılan route tarafından yakalanır ve özel handler hiçbir zaman devreye girmez. Routing sistemi tanımlanan sırayla eşleşme aradığından, sıralama MVC'de sessizce göz ardı edilen yaygın bir hatadır.

Bu yaklaşımın bir bedeli vardır: model binding, action filter'lar, [Authorize] gibi öznitelikler ve MVC'nin sunduğu diğer kolaylıklar Controller katmanına ait olduğundan, bir IHttpHandler içinde bunlardan hiçbiri otomatik çalışmaz. Kimlik doğrulama, Content-Type ayarı, hata yönetimi ve girdi doğrulaması gibi işlemlerin tamamı geliştirici tarafından elle yazılmalıdır. Bu nedenle bu teknik; performans kritik, basit ve düşük seviyeli uç noktalar için tercih edilmeli, MVC'nin standart avantajlarına ihtiyaç duyan iş mantığı içeren sayfalar için kullanılmamalıdır.

← Bloga dön

Son yazılar