【问题标题】:Server.Mappath in C# classlibraryC# 类库中的 Server.Mappath
【发布时间】:2009-07-29 11:11:31
【问题描述】:

如何在 C# 类库类中使用 server.mappath 方法,它充当我的 ASP.NET 网站的 BusinessLayer

【问题讨论】:

    标签: c# server.mappath


    【解决方案1】:

    通过调用它?

    var path = System.Web.HttpContext.Current.Server.MapPath("default.aspx");
    

    确保添加对 System.Web 程序集的引用。

    【讨论】:

    • 我应该说.net framework 4中不存在system.web程序集
    • 最糟糕的解决方案!如果我们需要使用 HTTP 上下文之外的业务层类怎么办?
    • 这个答案既不可移植(在 Web 应用程序之外),也不能在单元测试中测试。我同意忍者在这里。您可以使用 IOC 来注入值,也许使用接口。
    【解决方案2】:

    您可以使用以下代码获取基本路径并将所需的路径附加到该路径中。

    string  path = System.AppDomain.CurrentDomain.BaseDirectory;
    

    【讨论】:

      【解决方案3】:

      你应该引用 System.Web 并调用:

        HttpContext.Current.Server.MapPath(...)
      

      【讨论】:

        【解决方案4】:

        使用这个System.Web.Hosting.HostingEnvironment.MapPath()

        HostingEnvironment.MapPath("~/file")
        

        奇怪为什么这里没有人提到它。

        【讨论】:

        • 这和 System.Web.HttpContext.Current.Server.MapPath 有什么区别?我在两者之间找不到任何具体的东西
        【解决方案5】:

        也许您可以将其抽象为依赖项并创建一个 IVirtualPathResolver。这样,您的服务类就不会绑定到 System.Web,如果您想在不同的 UI 技术中重用您的逻辑,您可以创建另一个实现。

        【讨论】:

          【解决方案6】:

          在架构上,System.web 不应在业务逻辑层 (BLL) 中引用。将 BLL 应用到解决方案结构中以遵循关注点分离原则,因此参考 System.Web 是一种不好的做法。 BLL 不应在 Asp.net 上下文中加载/运行。由于这个原因,您应该考虑使用 System.AppDomain.CurrentDomain.BaseDirectory 而不是 System.Web.HttpContext.Current.Server.MapPath

          【讨论】:

            【解决方案7】:
            HostingEnvironment.MapPath
            System.Web.Hosting.HostingEnvironment.MapPath(path);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-09-21
              • 2013-10-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-29
              • 2014-02-01
              • 1970-01-01
              相关资源
              最近更新 更多