【问题标题】:Get current application physical path within Application_Start获取 Application_Start 中的当前应用程序物理路径
【发布时间】:2010-12-02 12:04:38
【问题描述】:

我无法使用

在 Application_Start 中获取当前物理路径
HttpContext.Current.Request.PhysicalApplicationPath

因为当时没有Request对象。

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

【问题讨论】:

标签: c# asp.net


【解决方案1】:
 protected void Application_Start(object sender, EventArgs e)
 {
     string path = Server.MapPath("/");
     //or 
     string path2 = Server.MapPath("~");
     //depends on your application needs

 }

【讨论】:

    【解决方案2】:

    我使用 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\
    

    【讨论】:

    • 我怎样才能得到:\\myserver\inetpub\wwwroot\myfolder 而不是 C:\inetpub\wwwroot\myfolder....
    • 选择上面的一个选项并写下这个小代码:var pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split(':'); pathComponents[0] = @"\\" + System.Environment.MachineName; var resultPath = string.Join("", pathComponents);
    【解决方案3】:

    你也可以使用

    HttpRuntime.AppDomainAppVirtualPath
    

    【讨论】:

    • 对于物理路径,您实际上需要HttpRuntime.AppDomainAppPath,它“获取当前应用程序域中托管的应用程序的应用程序目录的物理驱动器路径”。 HttpRuntime.AppDomainAppVirtualPath 实际上获得了一个虚拟路径,例如“/MyApp”。无论哪种方式,使用 HttpRuntime 是获取应用程序物理路径的最佳方式,因为它在每个上下文中都可用,包括静态上下文,甚至在 HttpApplication 对象可用之前。
    • 此处发布的其他解决方案需要通过Server 属性访问HttpServerUtility 实例,该属性仅在“Application_Start”等应用程序事件的上下文中或在活动的Web 请求中可用.
    • HttpRuntime.AppDomainAppPath
    【解决方案4】:

    使用Server.MapPath("~")

       

    【讨论】:

    • 这比 Server.MapPath("/");因为 Web 应用程序的路径可能与根应用程序的路径不同。
    • 并且HttpRuntime.AppDomainAppPath 比其中任何一个都更有效,因为它可以在包括静态上下文在内的任何上下文中工作,而所有其他选项都需要通过Server 属性访问HttpServerUtility 实例,这仅在诸如“Application_Start”之类的应用程序事件的上下文中或在活动的 Web 请求中可用。
    【解决方案5】:

    您可以使用此代码:

    AppDomain.CurrentDomain.BaseDirectory

    【讨论】:

      【解决方案6】:

      最好的选择是使用

      AppDomain.CurrentDomain.BaseDirectory
      

      因为它在系统命名空间中,并且对 system.web

      没有依赖

      这样你的代码会更便携

      【讨论】:

        【解决方案7】:

        还有静态 HostingEnvironment.MapPath

        【讨论】:

          【解决方案8】:

          使用下面的代码

          server.mappath() 在 asp.net 中

          application.startuppath 在 c# windows 应用程序中

          【讨论】:

            【解决方案9】:

            System.AppDomain.CurrentDomain.BaseDirectory

            这将为您提供应用程序的运行目录。这甚至适用于 Web 应用程序。之后,您就可以访问您的文件了。

            【讨论】:

              【解决方案10】:

              然而,所有这些选项之间存在细微差别

              我发现了

              如果你这样做

                  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"        
              

              【讨论】:

                猜你喜欢
                • 2012-11-26
                • 2010-10-26
                • 2012-08-29
                • 2012-05-23
                • 1970-01-01
                • 2016-02-28
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多