What is the difference between Server.MapPath and HostingEnvironment.MapPath?
Asked Answered
K

3

188

Is there any difference between Server.MapPath() and HostingEnvironment.MapPath()? Does Server.MapPath() have any advantages over HostingEnvironment.MapPath()?

My original problem was mapping the file path on a server when the HttpContext is not present and I cannot pass a Server variable from Global.asax to my method.

I used HostingEnvironment.MapPath() instead since it doesn't need HttpContext. Are there any situations when these two methods will give different results?

Kaine answered 3/6, 2009 at 11:28 Comment(1)
P
219

Server.MapPath() eventually calls HostingEnvironment.MapPath(), but it creates a VirtualPath object with specific options:

The VirtualPath object passed to HostingEnvironment.MapPath() is constructed like this:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

Edit: in reality, the only difference is that you are allowed to pass null to Server.MapPath(), but not to HostingEnvironment.MapPath()

Pogy answered 3/6, 2009 at 11:43 Comment(5)
So I will always get same results from both methods, right? (excluding null argument)Kaine
TL;DR: always use HostingEnvironment.MapPath() to keep sanity. (+1)Limekiln
There must be something different beyond null because Server.MapPath("myFolder") works fine but to get the same result with HostingEnvironment, I had to use HostingEnvironment.MapPath("~/myFolder").Griceldagrid
Fantastic answer for initiating an ftp session via a call to a web service. Saved me huge today!!!Armrest
Actually there is another difference - relative paths (e.g. Image/pict.png) are not allowed with HostingEnvironment.MapPath.Fomentation
B
120

Server.MapPath() requires an HttpContext. HostingEnvironment.MapPath does not.

Brighton answered 3/6, 2009 at 11:44 Comment(1)
but both require System.Web so will they work with Self Hosted OWIN environments?Aramen
I
0

Are there any situations when these two methods will give different results?

In WCF service, because of the null HttpContext.Current, you can't get the path by Server.MapPath() and will get a HttpException, but you can get the path by HostingEnvironment.MapPath().

// This will get a Http Exception
string path = System.Web.HttpContext.Current.Server.MapPath("myPath");
// This will get your path
string path = System.Web.HostingEnvironment.MapPath("~/myPath");

Reference:

Inventor answered 26/7, 2022 at 2:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.