如何解决相对于ASP.NET MVC 4应用程序根目录的path?

如何解决相对于ASP.NET MVC 4应用程序根目录的path? 也就是说,我想打开属于控制器操作的应用程序的文件,例如~/Data/data.html 。 这些path通常在Web.config指定。

编辑:

通过“解决”我的意思是将相对于应用程序根目录的path转换为绝对path, ~/Data/data.htmlC:\App\Data\Data.html

获取绝对path使用这个:

 String path = HttpContext.Current.Server.MapPath("~/Data/data.html"); 

编辑:

从上面的行中获取Controller的上下文。 通过HttpContext使用HttpContext ,testing更容易,因为它基于Controller的上下文,因此更加本地化。

我现在意识到,我不喜欢如何Server.MapPath工作原理(内部最终调用HostingEnvironment.MapPath )所以我现在推荐总是使用HostingEnvironment.MapPath因为它的静态和不依赖于上下文,除非你想要的… … –

当我需要一个控制器之外的path时,例如当我在Global.asax.cs中初始化组件时,我发现这个代码很有用:

 HostingEnvironment.MapPath("~/Data/data.html") 

只要使用以下

 Server.MapPath("~/Data/data.html") 

在行动中你可以打电话:

 this.Request.PhysicalPath 

返回参考当前控制器的物理path。 如果您只需要根path调用:

 this.Request.PhysicalApplicationPath