在 .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.AppDomainAppPath
和 System.Web.HttpRuntime.HttpContext.Server.MapPath("~")
@testpattern HttpContext
是System.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 应用程序中获取当前目录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Web API .NET Core 的控制器之外获取当前用户
如何获取 Xcode Playground 的当前工作目录?
asp.net Web 应用程序返回 IIS 信息而不是当前用户凭据