在MVC3中使用Server.MapPath

时间:2011-09-29 16:00:29

标签: c# asp.net asp.net-mvc-3 iis server.mappath

我有代码

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

返回

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

为什么我要获取ServiceController的路径SERVICENAME?我想要在

中的App_Data路径

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

3 个答案:

答案 0 :(得分:57)

您需要指定要从虚拟根开始:

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);

此外,最好使用Path.Combine来组合路径而不是连接字符串。 Path.Combine将确保您不会遇到双路分隔符的情况。

修改

  

您可以定义“绝对”和“相对”路径以及它们与“物理”和“虚拟”路径的比较吗?

MSDN在相对路径,物理路径和虚拟路径上都有good explanation。看看那里。

答案 1 :(得分:6)

到目前为止给出的答案正是您所寻找的,但我认为,在您的具体情况下,您实际需要的是:

AppDomain.CurrentDomain.GetData("DataDirectory").ToString()

如果在未来版本的MVC或ASP.NET中该目录名称发生更改,这仍将返回App_Data目录的文件路径。

答案 2 :(得分:0)

尝试这样做(@"~/App_Data")~/代表根目录。