从Request.url.AbsolutePath获取应用程序相对url
本文关键字:url 应用程序 相对 获取 AbsolutePath Request | 更新日期: 2023-09-27 18:27:40
如何从Request.Url.AbsolutePath
获取应用程序相对url?
VirtualPathUtility
似乎只适用于~/XXX
URL?
现在回答有点晚,但有一个优雅的解决方案。你可以使用
Request.Url.PathAndQuery
这将返回页面的相对路径。
例如,如果URL是www.example.com/products?A=a&B=b&C=c
,那么上面的代码将返回/products?A=a&B=b&C=c
我这样解决了它:
// 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);
这对我有效:
VirtualPathUtility.MakeRelative("~", Request.Url.AbsolutePath)
例如,如果网站的根是/Website
,而Request.Url.AbsolutePath
是/Website/some/path
,则返回some/path
。
要做到这一点,而不使用字符串操作和处理应用程序的相对路径,我使用了:
var relativeUrl = VirtualPathUtility.ToAppRelative(
new Uri(context.Request.Url.PathAndQuery, UriKind.Relative).ToString());
我认为这是最干净的方法:
new Uri(Request.Url.PathAndQuery, UriKind.Relative))
String appUrl = VirtualPathUtility.ToAbsolute("~/");
String RelativePath = new System.Uri(Page.Request.Url, "").PathAndQuery.Substring(appUrl.Length-1)
为了建立在Ashwin Singh的好答案之上,我需要将锚链接包含在我的相对URL中,所以我只是在最后重新添加了它:
Request.Url.PathAndQuery + Request.Url.Fragment
所以http://localhost:8080/abc/d?foo=bar#jazz
变成/abc/d?foo=bar#jazz
。