Using Server.MapPath in MVC3

2019-01-31 21:24发布

I have the code

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

It returns

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

Why am I getting the path to the ServiceController, SERVICENAME? I want the path to App_Data which is in

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

3条回答
你好瞎i
2楼-- · 2019-01-31 21:45

You need to specify that you want to start from the virtual root:

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

Additionally, it's better practice to use Path.Combine to combine paths rather than concatenate strings. Path.Combine will make sure you won't end up in a situation with double-path separators.

EDIT:

Can you define "absolute" and "relative" paths and how they compare to "physical" and "virtual" paths?

MSDN has a good explanation on relative, physical, and virtual paths. Take a look there.

查看更多
beautiful°
3楼-- · 2019-01-31 21:51

The answers given so far are what you are looking for, but I think, in your particular case, what you actual need is this:

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

This will still return the file path to the App_Data directory if that directory name changes in future versions of MVC or ASP.NET.

查看更多
祖国的老花朵
4楼-- · 2019-01-31 22:11

Try doing like this (@"~/App_Data"). ~/ represents the root directory.

查看更多
登录 后发表回答