如何从Request.Url.AbsolutePath
获取应用程序相对网址?
VirtualPathUtility
似乎只适用于~/XXX
网址?
答案 0 :(得分:31)
回答有点晚,但有一个优雅的解决方案。你可以使用
Request.Url.PathAndQuery
这将返回页面的相对路径。
例如,如果网址为www.example.com/products?A=a&B=b&C=c
,则上述代码将返回/products?A=a&B=b&C=c
答案 1 :(得分:16)
// create an absolute path for the application root
var appUrl = VirtualPathUtility.ToAbsolute("~/");
// remove the app path (exclude the last slash)
var relativeUrl = HttpContext.Current.Request.Url.AbsolutePath.Remove(0, appUrl.Length - 1);
答案 2 :(得分:9)
要在不使用字符串操作和处理我使用的应用程序相对路径的情况下执行此操作:
var relativeUrl = VirtualPathUtility.ToAppRelative(
new Uri(context.Request.Url.PathAndQuery, UriKind.Relative).ToString());
答案 3 :(得分:8)
这对我有用:
VirtualPathUtility.MakeRelative("~", Request.Url.AbsolutePath)
例如,如果网站的根目录为/Website
且Request.Url.AbsolutePath
为/Website/some/path
,则会返回some/path
。
答案 4 :(得分:4)
我认为这是最干净的方式:
new Uri(Request.Url.PathAndQuery, UriKind.Relative))
答案 5 :(得分:1)
String appUrl = VirtualPathUtility.ToAbsolute("~/");
String RelativePath = new System.Uri(Page.Request.Url, "").PathAndQuery.Substring(appUrl.Length-1)
答案 6 :(得分:0)
基于Ashwin Singh的不错答案 - 我需要将锚链接包含在我的相对URL中,所以我最后重新添加了它:
Request.Url.PathAndQuery + Request.Url.Fragment
因此http://localhost:8080/abc/d?foo=bar#jazz
变为/abc/d?foo=bar#jazz
。