Asp.NET Core’da IHostingEnvironment İle Server.MapPath’e Alternatif Yol

Merhaba,

Hatırlar mısınız? Klasik Asp.NET(Web Forms ya da MVC)’de server’a ait işlemlerimizi genellikle “HttpContext” sınıfı üyelerinden olan “Server” property’si aracılığıyla gerçekleştiriyorduk. Bu işlemler arasında en çok kullandığımız işlevsellik ise bizlere server’ın kök dizinini veren “MapPath” metodu oluyordu. Günler geçti, aylar geçti, zaman su gibi akıp gitti… Asp.NET Core mimarisi geldi. Lakin içerisinden “Server.MapPath” kaldırıldı, gitti. İşte bizler bu içeriğimizde Asp.NET Core projelerinde Server.MapPath’e ihtiyacımız olduğunda alternatif olarak bizlere aynı hizmeti sağlayacak olan IHostingEnvironment interface’ini inceliyor olacağız.

IHostingEnvironment interface’i, Asp.NET Core mimarisi dahilinde gelen ve projenin bulunduğu sunucu hakkında bizlere gerekli ortamsal bilgileri getirecek alanları barındıran bir yapıya sahiptir. Yapısal olarak .NET Core çekirdeğinin fıtratında olan Dependency Injection özelliği sayesinde .NET Core’a dahil olduğu için hiçbir tanımlamada bulunmaksızın direkt olarak constructer’dan talep edilebilen IHostingEnvironment interface’inin projelerde aşağıdaki gibi kullanılması yeterli olacaktır.

    public class HomeController : Controller
    {
        IHostingEnvironment _hostingEnvironment;
        public HomeController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }
        public IActionResult Index()
        {
            var hostingInformation = _hostingEnvironment;
            return View();
        }
    }

Interface’e gelen nesnenin bizlere getirdiği ortamsal bilgilere göz atarsak eğer;
Asp.NET Core’da IHostingEnvironment İle Server.MapPath’e Alternatif Yol
görüldüğü gibi uygulamanın adından tutun, sunucuda ki root klasörüne kadar tüm yol verileri bizlere nesnesel olarak döndürülmektedir.

Burada “ContentRootPath” özelliğine dikkat edelim. Görüldüğü gibi ilgili özellik uygulamanın ana dizinini bizlere getirmektedir. Bizler, uygulamamızın ana dizinine “Program.cs” dosyası üzerinden “UseContentRoot” metodu ile aşağıdaki gibi müdahalede bulunabiliriz;

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseContentRoot("C:\\Users\\mebitech\\source\\repos\\IHostingEnvironmentExample\\IHostingEnvironmentExample")
                .UseStartup<Startup>();
    }

Dolayısıyla bu şekilde ilgili yolu kendimize göre kişiselleştirebiliriz.

İlgilenenlerin faydalanması dileğiyle.
Sonraki yazılarımda görüşmek üzere.
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.