2009-01-22 5 views
13

Ich versuche, den Pfad zu einem Ordner in meiner Website Wurzel zu bekommen und es zu einer Klasse Eigenschaft speichern, wenn mein Controller-Konstruktor aufgerufen wird:Wie kann ich den Pfad zu einem Ordner von einem Controller-Konstruktor in ASP.NET MVC finden?

public TestController:Controller{ 
    string temp; 

    public TestController(){ 
     temp = ""; 
     } 

    } 

ich folgende versucht:

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

Irgendwelche Ideen?

Antwort

25

AppDomain.CurrentDomain.BaseDirectory gibt Ihnen den Stamm Ihrer Website. Also:

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

(Aktualisierung dank Marc GRA Kommentar)

+0

Path.Combine ;-p –

+0

schöner sein würde dies das Temp-Ordner Verzeichnis zurückgibt, und Es könnte völlig falsche Ordner bedeuten. –

+0

goody lösung! –

0

Versuchen Sie, durch die Controller gehen. Verzeihen Sie meine Syntax, aber es sollte wie folgt:

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

Wenn Server noch null in dieser Situation ist, werden Sie außerhalb einer Web-Anfrage ausgeführt wird (dh in einem Test.)?

7

Benötigen Sie diesen Pfad tatsächlich während des Konstruktors? Wenn Sie es nicht benötigen, bis der Hauptseitenzyklus beginnt, ziehen Sie in Betracht, es zu verschieben - indem Sie nur eine normale Eigenschaft verwenden; etwas wie

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

Dann, wenn dies während des Seitenzyklus verwendet wird, sollte es in Ordnung sein. Man könnte es zwischenspeichern, wenn Sie wirklich wollen, aber ich glaube nicht, dies zu einem Engpass sein wird:

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

Das ist eine gute Idee. Ich könnte später diesen Weg gehen. Vielen Dank! –

Verwandte Themen