首页 文章

如何将虚拟路径映射到物理路径?

提问于
浏览
10

我知道我可以通过HostingEnvironment(Microsoft.AspNet.Hosting命名空间)获取WebRoot .

我需要根据在我的Web应用程序中的IIS中创建的虚拟路径获取物理路径 . 在IIS中,网站根目录指向我发布的网站的wwwroot,并且在IIS中添加了 virtual directory 指向我的wwwroot之外的文件夹 . 我希望我能够获得那个 virtual directory 的物理路径 . 在MVC 5或更早版本中,我可以使用HostingEnvironment.MapPath(System.Web命名空间)或Server.MapPath,我应该在MVC 6中做什么?

EDIT:

它不是虚拟路径,而是IIS中添加的虚拟目录 . 我希望我能够获得该虚拟目录的物理路径 . 我认为虚拟目录是IIS的一个特殊功能,它看起来像一个完整虚拟路径的子路径,但可以是物理Web根文件夹之外的文件夹 .

Oct 4, 2015

请参阅this issue in ASP.NET 5 Hosting repo,到目前为止,我们似乎无法获取IIS中虚拟目录的物理路径 .

2 回答

  • 6

    您可以使用 IApplicationEnvironment ,其中包含属性 ApplicationBasePath

    private readonly IApplicationEnvironment _appEnvironment;
    
        public HomeController(IApplicationEnvironment appEnvironment)
        {
            _appEnvironment = appEnvironment;
        }
    
        public IActionResult Index()
        {
            var rootPath = _appEnvironment.ApplicationBasePath;
            return View();
        }
    
  • 7

    在Azure Web Apps上,您会发现 wwwroot 位于不同的位置:

    除了 wwwroot 之外,所有源代码都被复制到 D:/Home/site/approot/src/{WebsiteName} . IApplicationEnvironment.ApplicationBasePath 点这里 .

    wwwroot 进入 D:/Home/site/wwwroot . IHostingEnvironment.WebRootPath 点在这里 .

    它仍然无法与IIS虚拟目录一起使用 . IHostingEnvironment 接口上有一个 WebRootFileProvider 属性,它提供 IFileProvider 方法,如 GetFileInfo(string subpath) . 我读了code,发现 subpath 是物理的,而不是虚拟的 .

    显然,在自托管设置中,没有IIS . 如果你依赖IIS并且真的必须这样做,你可能必须引用System.Web .

    HTH .

相关问题