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

当前回答

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

string AppContext.BaseDirectory { get;}

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

例:

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

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

其他回答

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

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

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

顺便说一句,使用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映射,那么这很有帮助。

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

string AppContext.BaseDirectory { get;}

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

例:

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

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

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

System.Web.HttpRuntime.AppDomainAppPath