【问题标题】:Get application path without using httpcontext. (asp.net)在不使用 httpcontext 的情况下获取应用程序路径。 (asp.net)
【发布时间】:2011-01-25 10:57:42
【问题描述】:

怎么做?

我不想用这个:

HttpContext.Current.Server.MapPath

有没有类似的函数可以在不需要 httpcontext 的情况下调用?

例如,如果启动一个线程做一些事情,我不能使用 httpcontext,但我仍然需要获取应用程序的路径。不,我不能将上下文作为参数传递或从共享变量中读取它。

【问题讨论】:

    标签: asp.net http iis httpcontext


    【解决方案1】:

    【讨论】:

    • 这是一个低级的类,大多数人不需要使用。
    【解决方案2】:

    有几种选择:

    HttpRuntime.AppDomainAppPath

        WebApplication     -> Web root folder
        UnitTest           -> ArgumentNullException
        ConsoleApplication -> ArgumentNullException
    

    AppDomain.CurrentDomain.BaseDirectory

        WebApplication     -> Web root folder
        UnitTest           -> ...\AppDir\bin\Debug
        ConsoleApplication -> ...\AppDir\bin\Debug
    

    HostingEnvironment.ApplicationPhysicalPath

        WebApplication     -> Web root folder
        UnitTest           -> null
        ConsoleApplication -> null
    

    我会推荐使用 AppDomain.CurrentDomain.BaseDirectory,因为它可以用于任何类型的项目并且可以设置。

    例如,您可以设置 UnitTest BaseDirectory 以通过命令将您的 Web 根文件夹指向 AppDomain.CurrentDomain.BaseDirectory:

    AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");
    

    【讨论】:

      【解决方案3】:

      在寻找计算 URL(Web 应用程序中的永久链接)以在某些电子邮件通知中提供的方法时,我遇到了这个问题。

      这些是在另一个线程上生成的,所以HttpContext 不可用,我想避免将 URL 相关信息放在用于生成电子邮件的队列表中。

      代码:

      public static String GetCurrentAppDomainBasePath(String prefix = "http://")
      {
         return String.Format("{0}{1}{2}", 
            prefix,
            System.Net.Dns.GetHostEntry("").HostName, 
            System.Web.HttpRuntime.AppDomainAppVirtualPath
         );
      }
      

      该函数返回完整的虚拟路径,例如:http://full-host-name/AppName。当然,也有一些限制:硬编码协议(http、https 等)以及使用hostname 而不是domain name(如果在一台机器上定义了多个域,则会失败)。

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        相关资源
        最近更新 更多