在 .NET Web 应用程序中获取当前目录

Posted

技术标签:

【中文标题】在 .NET Web 应用程序中获取当前目录【英文标题】:Getting current directory in .NET web application 【发布时间】:2012-06-12 16:12:43 【问题描述】:

所以我有一个 web 项目,我正在尝试使用 c# 方法Directory.GetCurrentDirectory() 获取网站的根目录。我不想使用静态路径,因为文件位置将来会发生变化。此方法在我的 imageProcess.aspx.cs 文件中运行,但我认为它会返回:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

我得到的是:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

谁能解释为什么会发生这种情况以及可能的解决方案是什么?非常感谢。

【问题讨论】:

相关帖子 here 讨论了一般的 .Net 应用程序执行路径。 另一篇关于server map paths in web applications in .Net的帖子 【参考方案1】:

当前目录是系统级功能;它返回启动服务器的目录。与网站无关。

你想要HttpRuntime.AppDomainAppPath

如果您在 HTTP 请求中,也可以调用 Server.MapPath("~/Whatever")

【讨论】:

谢谢。我实际上是在寻找HttpRuntime.BinDirectory,但是一旦我尝试了您在回答中提到的内容,这很容易在调试器中确定。 如果我使用 `Server.MapPath("~Whatever") 并且 IIS 站点托管在 myserver 中。我得到一个 C:\\somefolder\Whatever,而不是 myserver/Whatever 文件夹。 @Si8:是的;这就是Server.MapPath 所做的。你想要***.com/q/5823847/34397 如果您不熟悉 .NET 程序集(或在即时窗口中),完整的命令是 System.Web.HttpRuntime.AppDomainAppPathSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~") @testpattern HttpContextSystem.Web.HttpContext.Current.Server.MapPath("~"),没有HttpRuntime【参考方案2】:

使用此代码:

 HttpContext.Current.Server.MapPath("~")

详细参考:

Server.MapPath 指定映射到物理目录的相对或虚拟路径。

Server.MapPath(".") 返回当前的物理目录 正在执行的文件(例如 aspx) Server.MapPath("..") 返回父目录 Server.MapPath("~") 返回到根目录的物理路径 应用 Server.MapPath("/") 返回到根目录的物理路径 域名(不一定与 申请)

一个例子:

假设您将网站应用程序 (http://www.example.com/) 指向

C:\Inetpub\wwwroot

并在

中安装了您的商店应用程序(子网站作为 IIS 中的虚拟目录,标记为应用程序)
D:\WebApps\shop

例如,如果您在以下请求中调用Server.MapPath

http://www.example.com/shop/products/GetProduct.aspx?id=2342

然后:

Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

如果 Path 以正斜杠 (/) 或反斜杠 () 开头,MapPath 方法返回一个路径,就好像 Path 是一个完整的虚拟路径。

如果 Path 不以斜杠开头,MapPath 方法会返回相对于正在处理的请求的目录的路径。

注意:在 C# 中,@ 是逐字字面字符串运算符,表示该字符串应“按原样”使用,而不是针对转义序列进行处理。

脚注

Server.MapPath(null)Server.MapPath("") 也会产生这种效果。

【讨论】:

完美复制***.com/questions/275781/… @GGO 好链接!按照链接,我最终改为使用System.Web.Hosting.HostingEnvironment.MapPath("~"),效果很好,不依赖于System.Web.HttpContext.Current【参考方案3】:

对于 dot net 6,我使用:

AppContext.BaseDirectory

很酷的一点是,它在 asp.net 和控制台应用程序上都是一样的。

【讨论】:

以上是关于在 .NET Web 应用程序中获取当前目录的主要内容,如果未能解决你的问题,请参考以下文章

Java获取程序运行的当前工作目录

如何在 Web API .NET Core 的控制器之外获取当前用户

如何获取 Xcode Playground 的当前工作目录?

asp.net Web 应用程序返回 IIS 信息而不是当前用户凭据

在ASP.NET MVC 中获取当前URLcontrolleraction

如何在 C# 中获取当前用户的 Active Directory 详细信息