【问题标题】:How do I get the complete virtual path of an ASP.NET application如何获取 ASP.NET 应用程序的完整虚拟路径
【发布时间】:2010-10-30 06:50:07
【问题描述】:

我如何知道我的应用程序当前托管的完整虚拟路径?例如:

http://www.mysite.com/myApp

http://www.mysite.com/myApp/mySubApp

我知道 HttpRequest 的应用程序路径,但它只返回我的应用程序当前托管的文件夹名称,但我如何获取初始部分?

【问题讨论】:

    标签: asp.net path virtual


    【解决方案1】:

    路径的域名部分实际上并不是应用程序本身的属性,而是取决于请求的 URL。您可能能够从许多不同的主机名访问一个网站。要获取与当前请求关联的域名以及当前应用程序的虚拟路径,您可以:

    Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
    

    从技术上讲,“应用程序”是在 IIS 中定义的虚拟目录,Request.ApplicationPath 准确返回该目录。如果要获取处理当前请求的文件夹,可以这样做:

    VirtualPathUtility.GetDirectory(Request.Path)
    

    如果您的子应用程序没有在 IIS 中定义为虚拟目录,那么 ASP.NET 不知道如何区分您的子应用程序和更大的应用程序。无需在 IIS 中注册,它只会将整个事物视为一个应用程序。

    【讨论】:

    • 如果应用程序是IIS中的虚拟目录,但我们请求的页面在多个文件夹中,但我们希望路径包括虚拟目录而不是文件夹,怎么办?
    • @Krunal HttpRuntime.AppDomainAppVirtualPath 或 Request.ApplicationPath
    【解决方案2】:
    Request.Url
    

    它包含几个您可能会考虑使用的点,请参见下图:

    【讨论】:

      【解决方案3】:

      下面的代码可以解决这个问题,但是你必须针对两种场景做一些调整:

      1. 作为单独的 Web 应用程序托管。
      2. 在 Web 应用程序中作为虚拟应用程序托管。

        HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

      【讨论】:

        【解决方案4】:

        在 .NET 4.5 中

            VirtualPathUtility.ToAppRelative(path)
        

        【讨论】:

          【解决方案5】:

          试试这个(没试过)

          public string GetVirtualPath(string physicalPath)
          {
          string rootpath = Server.MapPath("~/");
          physicalPath = physicalPath.Replace(rootpath, "");
          physicalPath = physicalPath.Replace("\\", "/");
          return "~/" + physicalPath;
          }
          

          Link 1

          Link 2

          【讨论】:

            【解决方案6】:

            Url.Content("~") 对我来说效果很好,而且很简单。我在这样的视图中使用它:

            <a href="@(Url.Content("~" + attachment))">
            

            这里我的attachment 是类似“/Content/Documents/Blah.PDF”的路径

            当我的应用发布到使用虚拟目录的 IIS 站点时,Url.Content("~") 仅解析为虚拟目录名称,例如 "/app-test"

            【讨论】:

              猜你喜欢
              • 2012-05-23
              • 2021-08-15
              • 1970-01-01
              • 1970-01-01
              • 2011-09-30
              • 2017-03-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多