微软Web API:你如何做一个Server.MapPath?

由于Microsoft Web API不是MVC ,所以你不能这样做:

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

也没有这个

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

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

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

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

哪个会给我磁盘上的绝对path:

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

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

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

另请参见Server.MapPath和HostingEnvironment.MapPath有什么区别?

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

我不能从你提供的上下文中知道,但是如果这只是在应用程序启动时需要做的事情,你仍然可以在WebApiHttpApplication使用Server.MapPath ; 例如在Application_Start()

我只是回答你的直接问题。 已经提到的HostingEnvironment.MapPath()可能是首选的解决scheme。

除了那些偶然发现的问题之外,使用HostingEnvironment调用运行testing级别的一个很好的方法就是访问一个UNC共享:\ example \映射到〜/ 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 

如果你有权在本地testing一个文件,但是在生产中需要env映射,我觉得这很有帮助。

所选答案在我的Web API应用程序中不起作用。 我不得不使用

 System.Web.HttpRuntime.AppDomainAppPath