【发布时间】:2011-04-27 15:42:32
【问题描述】:
我需要从解决方案的另一个项目中映射我的 ASP MVC 项目中文件夹的路径。我的模型在另一个类库中。我引用了 System.web,但似乎找不到 Server.MapPath。
所以我的问题是:我的模型项目中需要包含哪些命名空间,以及如何在 MVC 中映射到 Web 应用程序中的文件夹?
非常感谢!
【问题讨论】:
标签: asp.net-mvc
我需要从解决方案的另一个项目中映射我的 ASP MVC 项目中文件夹的路径。我的模型在另一个类库中。我引用了 System.web,但似乎找不到 Server.MapPath。
所以我的问题是:我的模型项目中需要包含哪些命名空间,以及如何在 MVC 中映射到 Web 应用程序中的文件夹?
非常感谢!
【问题讨论】:
标签: asp.net-mvc
您应该能够通过带有 System.Web 引用的 HttpContext.Current.Server.MapPath 访问它。不过,将这种东西放在你的模型中似乎有点糟糕。
在控制器中,您可以使用 ControllerContext.HttpContext.Server.MapPath。
【讨论】:
您指的类型是HttpServerUtilityBase(通常通过Server.MapPath 调用),但HttpRequestBase 也有一个MapPath 方法(通常通过Request.MapPath 调用)。这些是 ASP.NET 4 的 System.Web.dll 的一部分。请注意,这些的具体实现是 HttpServerUtilityWrapper 和 HttpRequestWrapper。但总的来说,您永远不会创建这些实例。相反,请使用从 ControllerContext 获得的实例。
问题是为什么您的模型项目需要调用它?您可能希望避免让您的模型依赖于这些类型。理想情况下,您只需在创建模型时传递值。另一种方法是创建您自己的轻量级接口来定位文件路径,并让您的模型依赖于此。
但不知道你为什么需要它,我只能推测。 :) 如果您有充分的理由使用这些类,则需要将其中一个或另一个的实例传递给您的模型类,以便它可以调用它。
【讨论】:
它位于Controller.Server。如果您不将此引用传递到需要它的地方,我不确定上下文是否会正确设置。或者,您可以在控制器中映射路径并将路径传递给任何需要使用它的对象。
【讨论】: