因为微软Web API不是MVC,你不能做这样的事情:

var a = Request.MapPath("~");

也不是这

var b = Server.MapPath("~");

因为这些都在体制下。Web命名空间,而不是System.Web.Http命名空间。

那么如何在Web API中找出相对服务器路径呢?我曾经在MVC中做过这样的事情:

var myFile = Request.MapPath("~/Content/pics/" + filename);

这将给我磁盘上的绝对路径:

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"

当前回答

string root = HttpContext.Current.Server.MapPath("~/App_Data");

其他回答

顺便说一句,使用HostingEnvironment调用运行测试级别的一个好方法是,如果访问一个映射到~/example/的UNC共享:\example\,你可以执行这个来解决IIS-Express问题:

#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

我发现,如果您有权对文件进行本地测试,但在生产中需要env映射,那么这很有帮助。

您可以使用HostingEnvironment。MapPath在任何上下文中的System. MapPath。Web对象,比如HttpContext。当前不可用(例如,也从静态方法)。

var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");

请参见服务器之间的区别。MapPath和HostingEnvironment.MapPath?

我不能从你提供的上下文来判断,但如果这是你在应用启动时只需要做的事情,你仍然可以使用服务器。WebApiHttpApplication中的MapPath例如,在Application_Start()中。

我只是直接回答你的问题;前面提到的HostingEnvironment.MapPath()可能是首选的解决方案。

回答这个问题有点晚了,不过我们继续。

我可以使用环境来解决这个问题。CurrentDirectory

string root = HttpContext.Current.Server.MapPath("~/App_Data");