Microsoft Web API:如何执行Server.MapPath?

27 浏览
0 Comments

Microsoft Web API:如何执行Server.MapPath?

由于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
0 Comments

问题的出现原因是在WebAPI中,使用HttpContext.Current.Server.MapPath方法时会出现问题。在self-hosted APIs中,不能依赖HttpContext.Current对象的存在。而且这种方法也不利于进行测试。

解决方法是使用HostingEnvironment.MapPath方法代替HttpContext.Current.Server.MapPath方法。

以下是解决方法的代码示例:

string root = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data");

0
0 Comments

问题的出现原因是需要在代码中获取文件的物理路径,以便进行文件操作。解决方法是使用HostingEnvironment.MapPath方法来获取文件的物理路径。

在上述代码中,HostingEnvironment.MapPath方法被用于获取~/example/file文件的物理路径。在调试模式下,如果需要访问一个映射到\\example\file的UNC共享文件,可以使用new FileStream(@"\\example\file", FileMode.Open, FileAccess.Read)来获取文件流。

对于DNX core 5.0,HostingEnvironment类已经不再使用。而是通过在Startup.cs类的构造函数中注入IHostingEnvironment接口来获取环境信息。具体代码如下:

public Startup(IHostingEnvironment env)
{
    // 使用env对象获取环境信息
}

通过使用IHostingEnvironment接口,可以在每个实例中控制环境,并使用#if指令构建一个可以在多个环境中轻松部署的应用程序。

0
0 Comments

问题的出现原因是在某些情况下,如在静态方法中,无法使用System.Web对象(如HttpContext.Current)。在这种情况下,可以使用HostingEnvironment.MapPath方法来替代Server.MapPath方法。然而,由于HostingEnvironment是一个静态类实例,无法轻松进行模拟测试。

解决方法是在控制器或其他逻辑层中,依赖于自己的抽象层,例如IPathMapper接口。通过定义一个方法string MapPath(string virtualPath),将具体实现WebApi IPathMapper的路径映射功能委托给System.Web.Hosting.HostingEnvironment。在测试时,可以通过模拟重写GetWebPath方法来替代HostingEnvironment.MapPath方法。

然而,该方法在处理相对路径时(如../images/)可能存在问题。有用户提问是否可以通过使用HostingEnvironment来获取服务路径。

0