Как последовательно получить базовый путь приложения для проекта 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,

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