我非常惊讶地发现,.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('/');
}