2009-01-22 8 views
13

Je suis en train de faire le chemin vers un dossier dans ma racine de site Web et enregistrez une propriété de classe lorsque mon constructeur de contrôleur est appelé:Comment puis-je trouver le chemin vers un dossier à partir d'un constructeur de contrôleur dans ASP.NET MVC?

public TestController:Controller{ 
    string temp; 

    public TestController(){ 
     temp = ""; 
     } 

    } 

J'ai essayé ce qui suit:

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

Des idées?

Répondre

25

AppDomain.CurrentDomain.BaseDirectory vous donnera la racine de votre site. Alors:

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

(Mise à jour grâce au commentaire de Marc Gravell)

+0

Path.Combine serait plus agréable ;-P –

+0

ce retourne le répertoire du dossier temp, et cela pourrait signifier un dossier complètement faux. –

+0

bonne solution! –

0

Essayez de passer par le ControllerContext. Pardonnez ma syntaxe, mais il doit quelque chose comme ceci:

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

Si le serveur est encore nulle dans cette situation, vous exécutez en dehors d'une requête Web (par exemple dans un test.)?

7

Avez-vous réellement besoin de ce chemin pendant le constructeur? Si vous n'en avez pas besoin jusqu'à ce que le cycle de la page principale commence, envisagez de le reporter - en utilisant simplement une propriété régulière; quelque chose comme

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

Ensuite, lorsque cela est utilisé pendant le cycle de la page, ça devrait aller. Vous pouvez le mettre en cache si vous vraiment voulez, mais je ne pense pas que cela va être un goulot d'étranglement:

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

C'est une bonne idée. Je pourrais finir par suivre cette route plus tard. Merci! –

Questions connexes