因为微软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"

当前回答

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

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

其他回答

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

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

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

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

string AppContext.BaseDirectory { get;}

然后,您可以使用它来连接一个路径字符串,以将相对路径映射到任何文件。 注意:字符串路径是\而不是/,就像他们在mvc。

例:

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

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

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

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

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

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

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