Asp.Net’de standart olarak HttpContext sınıfının üyesi Server özelliğinin metodu olan MapPath metoduna alternatif olarak Asp.Net Core’da nasıl bir yöntem ile kullanabileceğimizi göreceğiz.
Bu makaleyi yazma sebebim Asp.Net Core projesi oluşturduğunuzda benim gibi projenin dizinine erişmek için HttpContext
sınıfı altında yer alan Server özelliğini arayacaksınız fakat böyle bir özellik maalesefki asp.net core’da yok farklı bir yol ile bu ihtiyacı karşılayacağız. Asp.Net Core’un en sevdiğim özelliklerinden olan Contructor Dependency Injection metodu ile ContentRootPath özelliği ve diğer birçok özelliğe erişebileceğiz Dependency Injection
için IHostingEnvironment
arayüzünü kullanacağız.
Şimdi bir senaryo üzerinden gidelim Download
adında bir metodumuz olduğunu varsayalım ve download metoduna fileId diye dosya numarası gönderiliyor bizde fiziksel download yolumuzdan bu fileId var ise indirtelim.
Şimdi IHostingEnvironment arayüzü ile Constructor Dependency Injection yöntemi ile nasıl elde edeceğimizi ve nasıl bir çıktı aldığımızı görelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; namespace WebApplication1.Controllers { public class HomeController : Controller { private IHostingEnvironment _env; public HomeController(IHostingEnvironment env) { _env = env; } public IActionResult Index() { return View(); } public IActionResult Download(int fileId) { var filePath = Path.Combine(_env.ContentRootPath, "Download", $"{fileId}.ext"); if (System.IO.File.Exists(filePath)) return File(filePath, "mime-type"); return NotFound(fileId); } } } |
IHostingEnvironment
arayüzünden bizlere şöyle bir çıktı verilmiş oldu.
Gördüğünüz gibi kullanabileceğimiz bize path sunan 2 özellik olduğunu görüyoruz. ContentRoot tam olarak proje ana dizinini veriyor fakat WebRootPath wwwroot dizinini veriyor biz Download klasörünü ana dizinde sakladığımız için ContentRootPath adlı özelliği kullanıyoruz.
Builder Design Pattern kullanılarak oluşturulmuş olan ve genellikle yeni Asp.net Core projesi oluşturduğunuzda Program.cs yada Startup.cs içerisinde WebHostBuilder sınıfı kullanılarak projenin belli başlı özellikleri ayarlanarak ayağa kaldırılır ve UseContentRoot adında bir metodunun olduğunu göreceksiniz bu metod ile ContentRootPath’deki yolu kendinize göre kişiselleştirebilirsiniz.
Çalışmalarınızı takdir ediyorum, lütfen devam edin
Teşekkür ederim, sizin böylesine değerli geri bildirimleriniz olduğu sürece inşallah meslek hayatım boyunca deneyimlerimi sürekli paylaşmayı düşünüyorum.