2009-09-29 50 views
33

获取当前应用程序的物理路径我不能使用内的Application_Start

HttpContext.Current.Request.PhysicalApplicationPath 

因为当时没有请求对象来获得内的Application_Start当前的物理路径。

我还能如何获得物理路径?

+0

相关信息[这里](https://stackoverflow.com/q/10951599/ 465053)。 – RBT 2017-11-14 10:30:03

回答

41
protected void Application_Start(object sender, EventArgs e) 
{ 
    string path = Server.MapPath("/"); 
    //or 
    string path2 = Server.MapPath("~"); 
    //depends on your application needs 

} 
+2

关于服务器路径的更多信息:http://stackoverflow.com/a/275791/133665 – HuBeZa 2016-05-01 11:18:09

16

使用Server.MapPath("~")

     

+4

这比Server.MapPath(“/”);因为Web应用程序的路径可能与根应用程序的路径不同。 – 2013-02-13 14:49:20

+9

而'HttpRuntime.AppDomainAppPath'比其中任何一个都更好,因为它可以在包括静态上下文的任何上下文中工作,而所有其他选项都需要通过'Server'属性访问'HttpServerUtility'实例,该属性仅在诸如“Application_Start”之类的应用程序事件的上下文或活动的Web请求中。 – Triynko 2013-07-31 22:49:27

3

在C#中的Windows应用程序下面的代码使用asp.net

application.startuppath

server.mappath()

22

您还可以使用

HttpRuntime.AppDomainAppVirtualPath 
+10

对于物理路径,您实际上需要'HttpRuntime.AppDomainAppPath',它“获取当前应用程序域中托管的应用程序的应用程序目录的物理驱动器路径。” 'HttpRuntime.AppDomainAppVirtualPath'实际上获得了一个虚拟路径,如“/ MyApp”。无论哪种方式,使用HttpRuntime是获取应用程序物理路径的最佳方式,因为它在每个上下文中都可用,甚至在“HttpApplication”对象可用之前也包括静态上下文。 – Triynko 2013-07-31 22:44:38

+1

此处发布的其他解决方案需要通过“服务器”属性访问“HttpServerUtility”实例,该属性仅在诸如“Application_Start”之类的应用程序事件的上下文或活动的Web请求中提供。 – Triynko 2013-07-31 22:47:32

+0

'HttpRuntime.AppDomainAppPath' – 2017-03-27 18:36:49

3

也有静态 HostingEnvironment.MapPath

9

您可以使用此代码:

AppDomain.CurrentDomain.BaseDirectory

2

System.AppDomain.CurrentDomain.BaseDirectory

这会给你你的应用程序的运行目录。这甚至适用于Web应用程序。之后,您可以访问您的文件。然而

1

有,所有这些选项,我发现这

之间细微的差别在于

如果你

string URL = Server.MapPath("~"); 

string URL = Server.MapPath("/"); 

string URL = HttpRuntime.AppDomainAppPath; 

您的网址将在您的链接显示资源这样的:

"file:///d:/InetPUB/HOME/Index/bin/Resources/HandlerDoc.htm" 

但是,如果你希望你的URL显示没有资源的位置,你应该做的

string URL = HttpRuntime.AppDomainAppVirtualPath; 

那么只有虚拟路径,您的网址显示的资源虚拟路径如下

"http://HOME/Index/bin/Resources/HandlerDoc.htm"   
16

我创建了一个带有ASP的网站.Net WebForms,您可以在其中看到使用之前Azure中的站点响应中提到的所有表单的结果。

http://wfserverpaths.azurewebsites.net/

总结:


Server.MapPath("/") => D:\home\site\wwwroot\ 

Server.MapPath("~") => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppPath => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppVirtualPath =>/

AppDomain.CurrentDomain.BaseDirectory => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("/") => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("~") => D:\home\site\wwwroot\ 
+0

我如何获得:\\ MYSERVER \的Inetpub \ wwwroot的\ MyFolder文件,而不是C:\的Inetpub \ wwwroot的\ MyFolder文件.... – Si8 2017-03-30 19:32:49

+1

选择上述选项,写这个小代码: 'VAR pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split(':'); pathComponents [0] = @“\\”+ System.Environment.MachineName; var resultPath = string.Join(“”,pathComponents);' – batressc 2017-07-11 16:20:54

2

最好的选择是使用

AppDomain.CurrentDomain.BaseDirectory 

,因为它是在保险观测EM名称空间,有没有依赖的System.Web

这样你的代码会更便携