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


105

因此,我有一个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\

谁能解释为什么会这样以及可能的解决方案是什么?非常感谢。


这里的相关文章通常讨论.Net应用程序的执行路径。
RBT

Answers:


210

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

你要HttpRuntime.AppDomainAppPath

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


2
谢谢。我实际上正在寻找HttpRuntime.BinDirectory,但是一旦我尝试了您在回答中提到的内容,就可以在调试器中轻松确定。
肯特·韦格尔

如果我使用`Server.MapPath(“〜Whatever”)并且IIS站点托管在myserver中。我得到一个C:\\ somefolder \ Whatever,而不是myserver / Whatever文件夹。
2013年

@ Si8:是的;就是Server.MapPath这样。您需要stackoverflow.com/q/5823847/34397
SLaks'4

2
如果您不熟悉.NET程序集(或在“即时窗口”中),则完整命令为System.Web.HttpRuntime.AppDomainAppPathSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
testpattern

2
@testpattern HttpContextSystem.Web.HttpContext.Current.Server.MapPath("~"),没有HttpRuntime
-chengzi

112

使用此代码:

 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

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

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

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

脚注

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



3
@GGO好链接!通过链接,我最终做了System.Web.Hosting.HostingEnvironment.MapPath("~"),它很好用,并且没有依赖System.Web.HttpContext.Current
Max Barraclough
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.