I am trying to get the path to a folder in my website root and save it to a class property when my controller constructor is called:
public TestController:Contro
AppDomain.CurrentDomain.BaseDirectory will give you the root of your site. So:
temp = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TheFolder");
(Update thanks to Marc Gravell's comment)
Do you actually need this path during the constructor? If you don't need it until the main page cycle begins, consider deferring it - just using a regular property; something like
public string BasePath {
get { return Server.MapPath("~/TheFolder/"); }
}
Then when this is used during the page cycle, it should be fine. You could cache it if you really want to, but I don't imagine this is going to be a bottleneck:
private string basePath;
public string BasePath {
get {
if(basePath == null) basePath = Server.MapPath("~/TheFolder/");
return basePath;
}
}
Try going through the ControllerContext. Forgive my syntax, but it should something like this:
base.[Controller?]Context.HttpContext.Server.MapPath();
If Server is still null in that situation, are you running outside of a web request (ie. in a test)?