Как сопоставить виртуальный путь с физическим путем?
Я знаю, что могу получить 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.
2 ответа
Ты можешь использовать 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. E сть WebRootFileProvider
собственность на IHostingEnvironment
интерфейс, который обеспечивает IFileProvider
с такими методами, как GetFileInfo(string subpath)
, Я прочитал код и нашел subpath
это физический, а не виртуальный.
Очевидно, что в автономной установке нет IIS. Если вы полагаетесь на IIS и действительно должны это делать, вам, вероятно, придется ссылаться на System.Web.
НТН.