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

时间:2015-01-22 06:54:21

标签: c# asp.net-core

我知道我可以通过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中虚拟目录的物理路径。

2 个答案:

答案 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}之外,所有源代码都会被复制到wwwrootIApplicationEnvironment.ApplicationBasePath指向此处。

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

它仍无法与IIS虚拟目录一起使用。 WebRootFileProvider界面上有一个IHostingEnvironment属性,可为IFileProvider提供GetFileInfo(string subpath)等方法。我读了code,发现subpath是物理的,而不是虚拟的。

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

HTH。