在业务层中使用Server.MapPath

时间:2012-09-06 06:51:16

标签: c# asp.net-mvc server.mappath business-layer

我的业务层创建文件,需要将它们保存在我的asp.net mvc 4 web前端的App_Data文件夹中。

我可以在业务层中使用Server.MapPath来获取App_Data文件夹的物理路径。但我想避免在业务层中引用System.Web

是否有其他方法可以在业务层中获取App_Data的路径?

4 个答案:

答案 0 :(得分:31)

处理此问题的正确方法是让表示层将路径传递到业务层。

换句话说,拥有业务层的目的是在ui和业务流程之间创建关注点分离。如果您强制业务流程了解ui层,那么您就违反了关注点。

有很多方法可以解决这个问题。在构造业务层时,您可以将路径传递到业务层,例如通过构造函数初始化或通过依赖注入。或者您可以将其传递给方法调用。或者,您可以创建某种形式的配置文件,业务层加载包含路径的配置文件。

有很多方法可以解决这个问题,而不是违反关注点。

答案 1 :(得分:16)

你可以使用

string  path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data";

答案 2 :(得分:4)

string path = HostingEnvironment.MapPath("~\\App_Data");

它对我有用

答案 3 :(得分:0)

我知道这是一个古老的问题,但仍然是一个非常有效的问题。我在这里看到了所有答案,我想在这里写下所有知识的笔记。

  1. 建议不要使用System.Web汇编程序,因为它会违反S.O.L.I.D原则。 例如,如果我们使用System.Web并尝试在Windows Form / Console / WPF应用程序中使用该DLL,则在这种情况下上下文将始终为空。
  2. 例如,您可能要访问文件夹data.txt文件夹下的App_data文件。在DLL中,您应该使用以下代码

    string rootDirectoryPath = AppDomain.CurrentDomain.BaseDirectory; string pathFinalAccessFile = Path.Combine(rootDirectoryPath, "App_Data", "data.txt");

您应该在C#中使用 Path.Combine 方法(如上面的代码所示),而不是手动在路径和文件名前加上引号和“ \”。 >