我如何知道我的应用程序当前托管的完整虚拟路径?例如:
http://www.mysite.com/myApp
要么
http://www.mysite.com/myApp/mySubApp
我知道HttpRequest的应用程序路径,但它只返回我的应用程序当前托管的文件夹名称,但是如何获取初始部分?
路径的域名部分实际上不是应用程序本身的属性,而是取决于请求的URL。您可以从许多不同的主机名访问单个Web站点。要获取与当前请求关联的域名以及当前应用程序的虚拟路径,您可以执行以下操作:
Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath
从技术上讲,“应用程序”是在IIS中定义的虚拟目录,而Request.ApplicationPath
就是这样返回的。如果要获取处理当前请求的文件夹,可以执行以下操作:
VirtualPathUtility.GetDirectory(Request.Path)
如果没有将子应用程序定义为IIS中的虚拟目录,ASP.NET不知道如何将子应用程序与更大的应用程序区分开来。如果没有在IIS中注册,它只会将整个内容视为一个应用程序。
Request.Url
它包含您可能考虑使用的几个要点,请参见下图:
在.NET 4.5中
VirtualPathUtility.ToAppRelative(path)
下面的代码将解决目的,但是您必须针对两种类型的场景进行一些调整:
Url.Content("~")
对我很有用,而且非常简单。我在视图中使用它像这样:
<a href="@(Url.Content("~" + attachment))">
在这里,我的attachment
是一条像“/Content/Documents/Blah.PDF”这样的路径。
当我的应用程序发布到使用虚拟目录的IIS站点时,Url.Content("~")
仅解析为虚拟目录名称,例如“/ app-test”。