如何获取ASP.NET应用程序的完整虚拟路径

36

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

http://www.mysite.com/myApp
或者
http://www.mysite.com/myApp/mySubApp
我知道如何获取HttpRequest的应用程序路径,但它只会返回我的应用程序当前托管的文件夹名称,那么我如何获取初始部分?
我知道如何获取HttpRequest的应用程序路径,但它只会返回我当前托管的应用程序所在的文件夹名称。如何获取初始部分?
6个回答

77

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

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

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

VirtualPathUtility.GetDirectory(Request.Path)

如果ASP.NET在IIS中未将你的子应用程序定义为虚拟目录,它就无法区分你的子应用程序和大型应用程序。如果没有在IIS中注册,ASP.NET将只视整个应用程序为单个应用程序。


2
如果应用程序是IIS中的虚拟目录,但我们请求的页面位于多个文件夹内,但我们希望路径包括虚拟目录而不包括文件夹,该怎么办? - Krunal
1
@Krunal HttpRuntime.AppDomainAppVirtualPath 或 Request.ApplicationPath - jproch

18
Request.Url

它包含了一些你可能考虑使用的点,如下图所示:

在此输入图片描述


7

.NET 4.5 中

    VirtualPathUtility.ToAppRelative(path)

6
下面的代码可以解决问题,但是你需要对两种情况进行微调:
  1. 作为独立的 Web 应用程序托管。
  2. 作为 Web 应用程序中的虚拟应用程序托管。

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


2

尝试这个(我还没有尝试过)

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

链接1

链接2


0

Url.Content("~") 对我非常有效,而且简单明了。我在视图中像这样使用它:

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

这里我的attachment是一个路径,比如“/Content/Documents/Blah.PDF”

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接