我知道我可以通过HostingEnvironment(Microsoft.AspNet.Hosting命名空间)获取WebRoot。
我需要根据在我的Web应用程序中的IIS中创建的虚拟路径获取物理路径。在IIS中,网站根目录指向我发布的网站的wwwroot,并且在IIS中添加了一个虚拟目录,指向我的wwwroot之外的文件夹。我希望我能够获得虚拟目录的物理路径。在MVC 5或更早版本中,我可以使用HostingEnvironment.MapPath(System.Web命名空间)或Server.MapPath,我应该在MVC 6中做什么?
修改
它不是虚拟路径,而是IIS中添加的虚拟目录。我希望我能够获得该虚拟目录的物理路径。我认为虚拟目录是IIS的一个特殊功能,它看起来像一个完整虚拟路径的子路径,但可以是物理Web根文件夹之外的文件夹。
2015年10月4日
请参阅this issue in ASP.NET 5 Hosting repo,到目前为止,我们似乎无法获取IIS中虚拟目录的物理路径。
答案 0 :(得分:7)
您可以使用IApplicationEnvironment
,其中包含属性ApplicationBasePath
private readonly IApplicationEnvironment _appEnvironment;
public HomeController(IApplicationEnvironment appEnvironment)
{
_appEnvironment = appEnvironment;
}
public IActionResult Index()
{
var rootPath = _appEnvironment.ApplicationBasePath;
return View();
}
答案 1 :(得分:6)
在Azure Web Apps上,您会发现wwwroot
位于不同的位置:
除了D:/Home/site/approot/src/{WebsiteName}
之外,所有源代码都会被复制到wwwroot
。 IApplicationEnvironment.ApplicationBasePath
指向此处。
wwwroot
进入D:/Home/site/wwwroot
。 IHostingEnvironment.WebRootPath
指向此处。
它仍无法与IIS虚拟目录一起使用。 WebRootFileProvider
界面上有一个IHostingEnvironment
属性,可为IFileProvider
提供GetFileInfo(string subpath)
等方法。我读了code,发现subpath
是物理的,而不是虚拟的。
显然,在自托管设置中,没有IIS。如果您依赖IIS并且真的必须这样做,那么您可能必须引用System.Web。
HTH。