从Request.url.AbsolutePath获取应用程序相对url

本文关键字:url 应用程序 相对 获取 AbsolutePath Request | 更新日期: 2023-09-27 18:27:40

如何从Request.Url.AbsolutePath获取应用程序相对url?

VirtualPathUtility似乎只适用于~/XXX URL?

从Request.url.AbsolutePath获取应用程序相对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