我知道我可以通过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 回答
您可以使用
IApplicationEnvironment
,其中包含属性ApplicationBasePath
在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 .