由于 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"
答案 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(@ +路径)