Как сопоставить виртуальный путь к физическому пути?

Я знаю, что могу получить WebRoot через HostingEnvironment (пространство имен Microsoft.AspNet.Hosting).

Мне нужно получить физический путь в соответствии с виртуальным путем, созданным в IIS в моем веб-приложении. В IIS корень сайта указывает на wwwroot моего опубликованного сайта, и в IIS добавлен виртуальный каталог, который указывает на папку вне моего wwwroot. Надеюсь, я смогу получить физический путь к этому виртуальному каталогу . В MVC 5 или более ранней версии я могу использовать HostingEnvironment.MapPath (пространство имен System.Web) или Server.MapPath, что мне делать в MVC 6?

РЕДАКТИРОВАТЬ:

Это не виртуальный путь, а виртуальный каталог, добавленный в IIS. Надеюсь, я смогу получить физический путь к этому виртуальному каталогу. Я думаю, что виртуальный каталог – это особая особенность IIS, которая выглядит как дополнительный путь полного виртуального пути, но может быть папкой вне физической корневой папки.

4 октября 2015 г.

Обратитесь к этой проблеме в 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/wwwroot . IHostingEnvironment.WebRootPath указывает здесь.

Он по-прежнему не будет работать с виртуальными каталогами IIS. В WebRootFileProvider свойство IHostingEnvironment которое предоставляет IFileProvider такими методами, как GetFileInfo(string subpath) . Я прочитал код и нашел, что subpath является физической, а не виртуальной.

Очевидно, что в автономной установке IIS отсутствует. Если вы полагаетесь на IIS и действительно должны это сделать, вам, вероятно, придется обратиться к System.Web.

НТН.