【问题标题】:How to map virtual path to physical path?如何将虚拟路径映射到物理路径?
【发布时间】:2015-01-22 06:54:20
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

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

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

    【讨论】:

    • 我不认为我可以通过这种方式获得在 IIS 中定义的虚拟目录。 ApplicationBasePath 表示我的wwwroot 的根路径,但虚拟目录可以是我的 wwwroot 之外的完全不同的路径,尽管虚拟目录 url 本身看起来像我网站的子文件夹。
    • IApplicationEnvironment.ApplicationBasePath 正是应用程序根目录的物理目录(不是 IIS 的 wwwroot)。这是一个包含应用程序 project.json 的目录。 IHostingEnvironment.WebRoot 是您的 webroot 的 ApplicationBasePath 的子目录 - 它是在应用程序的 project.json 中指定为 webroot 的目录。例如,它是 StaticFilesMiddleware 提供文件的目录。
    【解决方案2】:

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

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

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

    它仍然不适用于 IIS 虚拟目录。在IHostingEnvironment 接口上有一个WebRootFileProvider 属性,它为IFileProvider 提供了类似GetFileInfo(string subpath) 的方法。我看了code,发现subpath是物理的,不是虚拟的。

    显然,在自托管设置中,没有 IIS。如果您依赖 IIS 并且确实必须这样做,您可能必须参考 System.Web。

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-30
      • 2011-08-30
      相关资源
      最近更新 更多