【发布时间】:2012-02-01 07:52:19
【问题描述】:
我正在尝试获取一个以波浪号 ('~') 开头的典型 asp.net 网址,以解析为以“http:”开头的完整网址
我有这个字符串“~/PageB.aspx”
我想让它变成“http://myServer.com/PageB.aspx”
我知道有几种方法可以解析 url 并获取服务器和应用程序的不同路径等。我试了好几次都没有得到我想要的结果。
【问题讨论】:
我正在尝试获取一个以波浪号 ('~') 开头的典型 asp.net 网址,以解析为以“http:”开头的完整网址
我有这个字符串“~/PageB.aspx”
我想让它变成“http://myServer.com/PageB.aspx”
我知道有几种方法可以解析 url 并获取服务器和应用程序的不同路径等。我试了好几次都没有得到我想要的结果。
【问题讨论】:
试试
System.Web.VirtualPathUtility.ToAbsolute("yourRelativePath");
在 ASP.NET 中有多种可用的方法,我们可以使用这些方法来解析服务器端资源的相对路径并使其在客户端可用。我知道 4 种方法 -
1) Request.ApplicationPath
2) System.Web.VirtualPathUtility
3) Page.ResolveUrl
4) Page.ResolveClientUrl
【讨论】:
如果您在页面处理程序中,您始终可以使用ResolveUrl 方法将相对路径转换为特定于服务器的路径。但是,如果您还想要“http://www.yourserver.se”部分,则必须在前面加上 Request.Url.Scheme 和 Request.Url.Authority。
【讨论】:
string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl));
【讨论】:
这种方法对我来说是最好的。没有字符串操作,它可以容忍相对或绝对 URL 作为输入,并且它使用与当前请求使用的完全相同的方案、权限、端口和根路径:
private Uri GetAbsoluteUri(string redirectUrl)
{
var redirectUri = new Uri(redirectUrl, UriKind.RelativeOrAbsolute);
if (!redirectUri.IsAbsoluteUri)
{
redirectUri = new Uri(new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath), redirectUri);
}
return redirectUri;
}
【讨论】: