Как последовательно получить базовый путь приложения для проекта ASP.NET 5 DNX как в рабочей среде, так и в среде разработки?
Я развернул веб-сайт ASP.NET MVC 6 в Azure из Git. Подробную информацию о развертывании можно найти в этом сообщении в блоге, но в основном я использую DNU, чтобы опубликовать его, а затем kudu, чтобы отправить его на веб-сайт Azure.
С помощью IHostingEnvironment
Я получаю ApplicationBasePath. Проблема в том, что пути, которые я получаю, сильно различаются на локальном хосте и в Azure.
Azure: "D: \ home \ site \ Approot \ src \ src"
Localhost: "C: \ Users \ deebo \ Source \ mysite \ site \ src"
Я хочу использовать базовый путь, чтобы получить полный путь к папке, содержащей несколько изображений: wwwroot/img/gallery/
Я обошел это с помощью следующего кода:
var rootPath = _appEnvironment.ApplicationBasePath;
var pathFix = "../../../";
if(_hostingEnvironment.IsDevelopment())
{
pathFix = string.Empty;
}
var imagesPath = Path.Combine(rootPath, pathFix, "wwwroot", "img", "gallery");
Это может сработать, но кажется хакерским
Возможно ли, что мой метод развертывания влияет на это?
Есть ли более последовательный способ получить путь к приложению?
1 ответ
Вы можете использовать IHostingEnvironment.WebRootPath
, Из глубокого погружения Asp 5:
IHostingEnvironment
services предоставляет вам доступ к корневому веб-пути для вашего приложения (обычно к папке www), а также к абстракции IFileProvider для вашего веб-корневого каталога.
Таким образом, вы можете получить путь к wwwroot или даже напрямую отобразить путь:
var wwwrootPath = env.WebRootPath;
var imagesPath = hostingEnv.MapPath("img/gallery");
PS. Я пробовал это локально, а не на Azure. Однако я не нашел упоминаний о проблемах в Azure. Этот ответ даже упоминает, что в Azure IHostingEnvironment.WebRootPath
будет указывать на D:/Home/site/wwwroot
,