由于微软的Web API不是MVC,你不能做这样的事情:
var a = Request.MapPath("~");
这也
var b = Server.MapPath("~");
因为这些都是下System.Web
命名空间,而不是System.Web.Http
命名空间。
那么,你如何找出在网页API相对于服务器的路径?
我以前做这样的事情在MVC:
var myFile = Request.MapPath("~/Content/pics/" + filename);
这将使我在磁盘上的绝对路径:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
您可以使用HostingEnvironment.MapPath在任何情况下,其中System.Web
状物体HttpContext.Current
不可用(如也从一个静态方法)。
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");
又见是什么和使用Server.Mappath之间HostingEnvironment.MapPath的区别?
string root = HttpContext.Current.Server.MapPath("~/App_Data");
顺便说一句那些跨越这个蹒跚一起,一个很好的方式,在使用HostingEnvironment调用运行测试级别,是,如果访问说UNC共享:\例子\映射到〜/例子/你能执行此得到解决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
在WebApiHttpApplication
; 例如在Application_Start()
我只是回答你直接的问题; 已经提到的HostingEnvironment.MapPath()
可能是优选的解决方案。
所选择的答案并没有在我的Web API应用程序。 我不得不使用
System.Web.HttpRuntime.AppDomainAppPath
你可以尝试这样的:
VAR路径= “〜/图像/ test.png”; System.Web.Hosting.HostingEnvironment.MapPath(@ +路径)