Как найти путь к папке из конструктора контроллера в ASP.NET MVC? - PullRequest
13 голосов
/ 22 января 2009

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

public TestController:Controller{
    string temp;

    public TestController(){
        temp = "";
        }

    }

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

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

Есть идеи?

Ответы [ 3 ]

26 голосов
/ 22 января 2009

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

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

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

7 голосов
/ 22 января 2009

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

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

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

private string basePath;
public string BasePath {
    get {
        if(basePath == null) basePath = Server.MapPath("~/TheFolder/");
        return basePath;
    }
}
0 голосов
/ 22 января 2009

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

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

Если сервер в этом случае по-прежнему равен нулю, выполняется ли вне веб-запроса (т. Е. В тесте)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...