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

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

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

也不是这

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

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

因此,如何在Web API中找出相对服务器路径?

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

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

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
149434 次浏览

你可以在任何System.Web对象(如HttpContext.Current)不可用的情况下使用HostingEnvironment。MapPath(例如从静态方法中)。

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

另见服务器之间有什么区别。MapPath和HostingEnvironment.MapPath?

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

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

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映射,那么这很有帮助。

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

System.Web.HttpRuntime.AppDomainAppPath

你可以这样尝试:

路径< p > var = " ~ / / test.png”形象; System.Web.Hosting.HostingEnvironment。MapPath(@ + path)

.使用实例

由于Server.MapPath()不存在于Web Api (Soap或REST)中,你需要指示本地-相对于Web服务器的上下文-主目录。最简单的方法是:

string AppContext.BaseDirectory { get;}

然后你可以使用它来连接一个路径字符串,将相对路径映射到任何文件 注意:字符串路径是\,而不是mvc中的/

例:

System.IO.File.Exists($"{**AppContext.BaseDirectory**}\\\\Content\\\\pics\\\\{filename}");

返回true-假设在您的示例中这是一个声音路径

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

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