微软Web API:你如何做一个Server.MapPath?
由于Microsoft Web API不是MVC ,所以你不能这样做:
var a = Request.MapPath("~");
也没有这个
var b = Server.MapPath("~");
因为这些是在System.Web
命名空间下,而不是System.Web.Http
命名空间。
那么如何找出Web API中的相关服务器path呢?
我曾经在MVC中做过这样的事情:
var myFile = Request.MapPath("~/Content/pics/" + filename);
哪个会给我磁盘上的绝对path:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
您可以在System.Web
对象(如HttpContext.Current
不可用的任何上下文中(例如,也可以使用静态方法)使用HostingEnvironment.MapPath 。
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");
另请参见Server.MapPath和HostingEnvironment.MapPath有什么区别?
string root = HttpContext.Current.Server.MapPath("~/App_Data");
我不能从你提供的上下文中知道,但是如果这只是在应用程序启动时需要做的事情,你仍然可以在WebApiHttpApplication
使用Server.MapPath
; 例如在Application_Start()
。
我只是回答你的直接问题。 已经提到的HostingEnvironment.MapPath()
可能是首选的解决scheme。
除了那些偶然发现的问题之外,使用HostingEnvironment调用运行testing级别的一个很好的方法就是访问一个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
如果你有权在本地testing一个文件,但是在生产中需要env映射,我觉得这很有帮助。
所选答案在我的Web API应用程序中不起作用。 我不得不使用
System.Web.HttpRuntime.AppDomainAppPath