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

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

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

编辑:

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

2015年10月4日

请参阅ASP.NET 5 Hosting repo中的这个问题 ,到目前为止,我们似乎无法获得IIS中虚拟目录的物理路径。

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

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

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

所有源代码都被复制到D:/Home/site/approot/src/{WebsiteName}wwwroot除外。 IApplicationEnvironment.ApplicationBasePath指向此处。

wwwroot进入D:/Home/site/wwwrootIHostingEnvironment.WebRootPath指向此处。

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

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

HTH。