Microsoft Web API: How do you do a Server.MapPath?
Solution 1:
You can use HostingEnvironment.MapPath in any context where System.Web
objects like HttpContext.Current
are not available (e.g also from a static method).
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");
See also What is the difference between Server.MapPath and HostingEnvironment.MapPath?
Solution 2:
string root = HttpContext.Current.Server.MapPath("~/App_Data");
Solution 3:
As an aside to those that stumble along across this, one nice way to run test level on using the HostingEnvironment call, is if accessing say a UNC share: \example\ that is mapped to ~/example/ you could execute this to get around IIS-Express issues:
#if DEBUG
var fs = new FileStream(@"\\example\file",FileMode.Open, FileAccess.Read);
#else
var fs = new FileStream(HostingEnvironment.MapPath("~/example/file"), FileMode.Open, FileAccess.Read);
#endif
I find that helpful in case you have rights to locally test on a file, but need the env mapping once in production.
Solution 4:
I can't tell from the context you supply, but if it's something you just need to do at app startup, you can still use Server.MapPath
in WebApiHttpApplication
; e.g. in Application_Start()
.
I'm just answering your direct question; the already-mentioned HostingEnvironment.MapPath()
is probably the preferred solution.