从相对路径获取绝对路径(重构方法)

64

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

1
你的代码有一个小建议。你应该使用String.Format而不是在结尾处连接URL片段。 - Bernd
11个回答

-2

这个也可以正常工作:

HttpContext.Current.Server.MapPath(relativePath)

其中相对路径类似于"~/foo/file.jpg"


3
我必须不同意。Server.MapPath是指物理位置,而不是像OP请求那样的绝对Uri。参考https://dev59.com/v3VC5IYBdhLWcg3wfxM8 - Hoàng Long

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接