36

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

http://www.mysite.com/myApp

或者

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

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

4

6 回答 6

77

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

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

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

VirtualPathUtility.GetDirectory(Request.Path)

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

于 2009-05-31T20:13:35.537 回答
19
Request.Url

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

在此处输入图像描述

于 2009-05-31T20:16:55.577 回答
6

下面的代码将解决这个目的,但是您必须对两种类型的场景进行一些调整:

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

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

于 2009-11-23T07:50:43.000 回答
6

在 .NET 4.5 中

    VirtualPathUtility.ToAppRelative(path)
于 2014-02-03T03:27:23.310 回答
2

试试这个(没试过)

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

链接 1

链接 2

于 2009-05-31T20:08:27.810 回答
0

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

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

这是我attachment的路径,例如"/Content/Documents/Blah.PDF"

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

于 2019-03-12T19:17:20.900 回答