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

Я знаю, что могу получить 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.

НТН.

Другие вопросы по тегам