Подтвердить что ты не робот

Как я могу найти путь к папке из конструктора контроллера в ASP.NET MVC?

Я пытаюсь получить путь к папке в корне моего сайта и сохранить его в свойстве класса при вызове конструктора контроллера:

public TestController:Controller{
    string temp;

    public TestController(){
        temp = "";
        }

    }

Я пробовал следующее:

temp = Server.MapPath("~/TheFolder/"); // Server is null - error.
temp = Request.PhysicalApplicationPath + @"TheFolder\"; // Request is null - error.

Любые идеи?

4b9b3361

Ответ 1

AppDomain.CurrentDomain.BaseDirectory предоставит вам корень вашего сайта. Итак:

temp = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TheFolder");

(Обновление благодаря комментарию Марка Гравелла)

Ответ 2

Вам действительно нужен этот путь во время конструктора? Если вам это не нужно, пока не начнется цикл главной страницы, подумайте о его отсрочке - просто используя регулярное свойство; что-то вроде

public string BasePath {
    get { return Server.MapPath("~/TheFolder/"); }
}

Затем, когда это используется во время цикла страницы, это должно быть хорошо. Вы можете кэшировать его, если хотите, но я не думаю, что это будет узким местом:

private string basePath;
public string BasePath {
    get {
        if(basePath == null) basePath = Server.MapPath("~/TheFolder/");
        return basePath;
    }
}

Ответ 3

Попробуйте пройти через ControllerContext. Простите мой синтаксис, но он должен выглядеть примерно так:

base.[Controller?]Context.HttpContext.Server.MapPath();

Если в этой ситуации сервер все еще пуст, вы работаете за пределами веб-запроса (т.е. в тесте)?