Tru*_*an1 56 .net c# asp.net .net-3.5
我真的很惊讶,没有本地.NET方法从相对URL获取绝对URL.我知道这已经讨论了很多次,但从来没有遇到过一个能很好地处理这个问题的令人满意的方法.你能帮助微调下面的方法吗?
我认为我需要的只是自动选择协议而不是硬编码(http/https).我还缺少什么(警告,表演等)?
public static string GetAbsoluteUrl(string url)
{
//VALIDATE INPUT FOR ALREADY ABSOLUTE URL
if (url.StartsWith("http://", StringComparison.OrdinalIgnoreCase)
|| url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
return url;
}
//GET PAGE REFERENCE FOR CONTEXT PROCESSING
Page page = HttpContext.Current.Handler as Page;
//RESOLVE PATH FOR APPLICATION BEFORE PROCESSING
if (url.StartsWith("~/"))
{
url = page.ResolveUrl(url);
}
//BUILD AND RETURN ABSOLUTE URL
return "http://" + page.Request.ServerVariables["SERVER_NAME"] + "/"
+ url.TrimStart('/');
}
Run Code Online (Sandbox Code Playgroud)
Nat*_*lor 90
这一直是我解决这个小麻烦的方法.请注意,使用VirtualPathUtility.ToAbsolute(relativeUrl)允许将该方法声明为静态类中的扩展.
/// <summary>
/// Converts the provided app-relative path into an absolute Url containing the
/// full host name
/// </summary>
/// <param name="relativeUrl">App-Relative path</param>
/// <returns>Provided relativeUrl parameter as fully qualified Url</returns>
/// <example>~/path/to/foo to http://www.web.com/path/to/foo</example>
public static string ToAbsoluteUrl(this string relativeUrl) {
if (string.IsNullOrEmpty(relativeUrl))
return relativeUrl;
if (HttpContext.Current == null)
return relativeUrl;
if (relativeUrl.StartsWith("/"))
relativeUrl = relativeUrl.Insert(0, "~");
if (!relativeUrl.StartsWith("~/"))
relativeUrl = relativeUrl.Insert(0, "~/");
var url = HttpContext.Current.Request.Url;
var port = url.Port != 80 ? (":" + url.Port) : String.Empty;
return String.Format("{0}://{1}{2}{3}",
url.Scheme, url.Host, port, VirtualPathUtility.ToAbsolute(relativeUrl));
}
Run Code Online (Sandbox Code Playgroud)
g.b*_*eze 66
new System.Uri(Page.Request.Url, "/myRelativeUrl.aspx").AbsoluteUri
Run Code Online (Sandbox Code Playgroud)
Car*_*lin 13
这个对我有用......
new System.Uri(Page.Request.Url, ResolveClientUrl("~/mypage.aspx")).AbsoluteUri
Run Code Online (Sandbox Code Playgroud)
使用ASP.NET,您需要考虑"相对URL"的参考点 - 它是相对于页面请求,用户控件,还是仅仅因为使用"〜/"它是"相对的"?
本Uri类包含一个简单的方法来转换一个相对URL为绝对URL(指定的绝对URL作为参考点相对URL):
var uri = new Uri(absoluteUrl, relativeUrl);
Run Code Online (Sandbox Code Playgroud)
如果relativeUrl实际上是一个绝对的URL,则absoluteUrl忽略它.
那么唯一的问题仍然是参考点是什么,以及是否允许"〜/"URL(Uri构造函数不翻译这些).
| 归档时间: |
|
| 查看次数: |
105293 次 |
| 最近记录: |