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

Zac*_*ott 231 asp.net-web-api

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

var a = Request.MapPath("~");
Run Code Online (Sandbox Code Playgroud)

也不是这个

var b = Server.MapPath("~");
Run Code Online (Sandbox Code Playgroud)

因为它们在System.Web命名空间下,而不是System.Web.Http命名空间.

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

var myFile = Request.MapPath("~/Content/pics/" + filename);
Run Code Online (Sandbox Code Playgroud)

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

"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
Run Code Online (Sandbox Code Playgroud)

Stu*_*tLC 453

您可以在任何无法使用对象的上下文中使用HostingEnvironment.MapPath(例如,也可以使用静态方法).System.WebHttpContext.Current

var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");
Run Code Online (Sandbox Code Playgroud)

另请参阅Server.MapPath和HostingEnvironment.MapPath之间的区别?

  • 当然,但是在您想要测试的控制器或其他逻辑层中,您只需依赖自己的抽象,例如`IPathMapper`(您可能会将其他一些问题卷入更大的工具带/实用程序接口)使用`string MapPath(string virtualPath)`方法.只有你的`WebApi IPathMapper`的具体实现需要知道`System.Web.Hosting.HostingEnvironment` (6认同)

Arg*_*dan 12

string root = HttpContext.Current.Server.MapPath("~/App_Data");
Run Code Online (Sandbox Code Playgroud)

  • 您不希望在WebAPI中使用HttpContext.Current.自托管API怎么样?你不能依赖HttpContext.Current来存在.它也不是测试友好的. (16认同)