C#类库中的Server.MapPath

62

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

7个回答

122

通过调用它?

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

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


1
我应该说,在 .NET Framework 4 中不存在 System.Web 程序集。 - Arash
16
最糟糕的解决方案!如果我们需要在HTTP上下文之外使用业务层类,该怎么办? - Sergey Metlov
6
这是正确的答案:https://dev59.com/tGjWa4cB1Zd3GeqPnh9X。 - Sergey Metlov
1
这个答案既不具备可移植性(在Web应用程序之外),也无法在单元测试中进行测试。我同意Ninja的观点。您可以使用IOC来注入该值,也许可以使用接口。 - Trevor de Koekkoek

25
你可以使用以下代码获取基本路径,并将你需要的路径附加到该路径上。
string  path = System.AppDomain.CurrentDomain.BaseDirectory;

7

这个和System.Web.HttpContext.Current.Server.MapPath有什么区别?我找不到两者之间的具体区别。 - Raj Kumar

7

您需要引用System.Web并调用:

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

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

2
HostingEnvironment.MapPath
System.Web.Hosting.HostingEnvironment.MapPath(path);

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接