【发布时间】:2010-12-02 12:04:38
【问题描述】:
我无法使用
在 Application_Start 中获取当前物理路径HttpContext.Current.Request.PhysicalApplicationPath
因为当时没有Request对象。
我还能如何获得物理路径?
【问题讨论】:
-
相关帖子here.
我无法使用
在 Application_Start 中获取当前物理路径HttpContext.Current.Request.PhysicalApplicationPath
因为当时没有Request对象。
我还能如何获得物理路径?
【问题讨论】:
protected void Application_Start(object sender, EventArgs e)
{
string path = Server.MapPath("/");
//or
string path2 = Server.MapPath("~");
//depends on your application needs
}
【讨论】:
我使用 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\
【讨论】:
var pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split(':'); pathComponents[0] = @"\\" + System.Environment.MachineName; var resultPath = string.Join("", pathComponents);
你也可以使用
HttpRuntime.AppDomainAppVirtualPath
【讨论】:
HttpRuntime.AppDomainAppPath,它“获取当前应用程序域中托管的应用程序的应用程序目录的物理驱动器路径”。 HttpRuntime.AppDomainAppVirtualPath 实际上获得了一个虚拟路径,例如“/MyApp”。无论哪种方式,使用 HttpRuntime 是获取应用程序物理路径的最佳方式,因为它在每个上下文中都可用,包括静态上下文,甚至在 HttpApplication 对象可用之前。
Server 属性访问HttpServerUtility 实例,该属性仅在“Application_Start”等应用程序事件的上下文中或在活动的Web 请求中可用.
HttpRuntime.AppDomainAppPath
【讨论】:
HttpRuntime.AppDomainAppPath 比其中任何一个都更有效,因为它可以在包括静态上下文在内的任何上下文中工作,而所有其他选项都需要通过Server 属性访问HttpServerUtility 实例,这仅在诸如“Application_Start”之类的应用程序事件的上下文中或在活动的 Web 请求中可用。
您可以使用此代码:
AppDomain.CurrentDomain.BaseDirectory
【讨论】:
最好的选择是使用
AppDomain.CurrentDomain.BaseDirectory
因为它在系统命名空间中,并且对 system.web
没有依赖这样你的代码会更便携
【讨论】:
还有静态 HostingEnvironment.MapPath
【讨论】:
使用下面的代码
server.mappath() 在 asp.net 中
application.startuppath 在 c# windows 应用程序中
【讨论】:
System.AppDomain.CurrentDomain.BaseDirectory
这将为您提供应用程序的运行目录。这甚至适用于 Web 应用程序。之后,您就可以访问您的文件了。
【讨论】:
然而,所有这些选项之间存在细微差别
我发现了
如果你这样做
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;
然后,您的 URL 将显示您的资源的虚拟路径,如下所示
"http://HOME/Index/bin/Resources/HandlerDoc.htm"
【讨论】: