Ответ 1
AppDomain.CurrentDomain.BaseDirectory предоставит вам корень вашего сайта. Итак:
temp = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TheFolder");
(Обновление благодаря комментарию Марка Гравелла)
Я пытаюсь получить путь к папке в корне моего сайта и сохранить его в свойстве класса при вызове конструктора контроллера:
public TestController:Controller{
string temp;
public TestController(){
temp = "";
}
}
Я пробовал следующее:
temp = Server.MapPath("~/TheFolder/"); // Server is null - error.
temp = Request.PhysicalApplicationPath + @"TheFolder\"; // Request is null - error.
Любые идеи?
AppDomain.CurrentDomain.BaseDirectory предоставит вам корень вашего сайта. Итак:
temp = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TheFolder");
(Обновление благодаря комментарию Марка Гравелла)
Вам действительно нужен этот путь во время конструктора? Если вам это не нужно, пока не начнется цикл главной страницы, подумайте о его отсрочке - просто используя регулярное свойство; что-то вроде
public string BasePath {
get { return Server.MapPath("~/TheFolder/"); }
}
Затем, когда это используется во время цикла страницы, это должно быть хорошо. Вы можете кэшировать его, если хотите, но я не думаю, что это будет узким местом:
private string basePath;
public string BasePath {
get {
if(basePath == null) basePath = Server.MapPath("~/TheFolder/");
return basePath;
}
}
Попробуйте пройти через ControllerContext. Простите мой синтаксис, но он должен выглядеть примерно так:
base.[Controller?]Context.HttpContext.Server.MapPath();
Если в этой ситуации сервер все еще пуст, вы работаете за пределами веб-запроса (т.е. в тесте)?