How to get absolute path in ASP.Net Core alternative way for Server.MapPath

前端 未结 5 1584
野的像风
野的像风 2020-12-02 18:39

How to get absolute path in ASP net core alternative way for Server.MapPath

I have tried to use IHostingEnvironment

5条回答
  •  醉酒成梦
    2020-12-02 18:43

    As of .Net Core v3.0, it should be IWebHostEnvironment to access the WebRootPath which has been moved to the web specific environment interface.

    Inject IWebHostEnvironment as a dependency into the dependent class. The framework will populate it for you

    public class HomeController : Controller {
        private IWebHostEnvironment _hostEnvironment;
    
        public HomeController(IWebHostEnvironment environment) {
            _hostEnvironment = environment;
        }
    
        [HttpGet]
        public IActionResult Get() {
            string path = Path.Combine(_hostEnvironment.WebRootPath, "Sample.PNG");
            return View();
        }
    }
    

    You could go one step further and create your own path provider service abstraction and implementation.

    public interface IPathProvider {
        string MapPath(string path);
    }
    
    public class PathProvider : IPathProvider {
        private IWebHostEnvironment _hostEnvironment;
    
        public PathProvider(IWebHostEnvironment environment) {
            _hostEnvironment = environment;
        }
    
        public string MapPath(string path) {
            string filePath = Path.Combine(_hostEnvironment.WebRootPath, path);
            return filePath;
        }
    }
    

    And inject IPathProvider into dependent classes.

    public class HomeController : Controller {
        private IPathProvider pathProvider;
    
        public HomeController(IPathProvider pathProvider) {
            this.pathProvider = pathProvider;
        }
    
        [HttpGet]
        public IActionResult Get() {
            string path = pathProvider.MapPath("Sample.PNG");
            return View();
        }
    }
    

    Make sure to register the service with the DI container

    services.AddSingleton();
    

提交回复
热议问题