Microsoft Web API:您如何做Server.MapPath?

时间:2013-05-15 04:51:28

标签: asp.net-web-api

由于 Microsoft Web API 不是 MVC ,因此您无法执行以下操作:

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

也不是这个

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

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

那么如何计算 Web API 中的相对服务器路径?
我以前在 MVC 中做了类似的事情:

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

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

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

8 个答案:

答案 0 :(得分:429)

您可以在System.Web HttpContext.Current之类的var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath"); 对象不可用的任何环境中使用HostingEnvironment.MapPath(例如,也可以使用静态方法)。

{{1}}

另见What is the difference between Server.MapPath and HostingEnvironment.MapPath?

答案 1 :(得分:11)

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

答案 2 :(得分:2)

除了那些偶然发现这一点之外,使用HostingEnvironment调用运行测试级别的一个好方法是,如果访问说出一个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

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

答案 3 :(得分:1)

我无法从您提供的上下文中看出来,但如果您只是需要在应用启动时执行此操作,您仍然可以在Server.MapPath中使用WebApiHttpApplication;例如在Application_Start()

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

答案 4 :(得分:0)

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

string AppContext.BaseDirectory { get;}

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

例如:

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

在您的示例中返回真实的声音路径

答案 5 :(得分:0)

晚一点回答,但是我们走了。

我可以使用Environment.CurrentDirectory

解决此问题

答案 6 :(得分:-1)

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

System.Web.HttpRuntime.AppDomainAppPath

答案 7 :(得分:-1)

您可以尝试:

var path =“〜/ Image / test.png”;     System.Web.Hosting.HostingEnvironment.MapPath(@ +路径)