【问题标题】:Convert relative path to full URL将相对路径转换为完整 URL
【发布时间】:2013-06-29 13:22:00
【问题描述】:

我的主要域名是http://redrocksoftware.com.au。我有一个文件的相对路径,例如 /PDF/myfile.pdf

我需要将此相对路径转换为完整的 URL。如下所示。

http://redrocksoftware.com.au/PDF/myfile.pdf

我在下面尝试过,但没有成功

VirtualPathUtility.ToAbsolute("/PDF/myfile.pdf")

【问题讨论】:

    标签: c# asp.net asp.net-mvc path


    【解决方案1】:

    您可以使用Uri Class 组合绝对URI 和相对路径:

    Uri absolute = new Uri("http://redrocksoftware.com.au/");
    Uri result = new Uri(absolute, "/PDF/MyFile.pdf");
    // result == {http://redrocksoftware.com.au/PDF/MyFile.pdf}
    

    【讨论】:

    • 我认为@chamara 是在询问如何检索绝对 url,而不是如何将两个字符串相加并将其转换为 Uri。
    • @KamilT:所以,只需使用Uri absolute = new Uri(Request.RawUrl);
    【解决方案2】:

    以下扩展方法对我有用:

     public static class Extensions
     {
        /// <summary>
        /// Turns a relative URL into a fully qualified URL.
        /// (ie http://domain.com/path?query) 
        /// </summary>
        /// <param name="request"></param>
        /// <param name="relativeUrl"></param>
        /// <returns></returns>
        public static string GetFullUrl(this HttpRequest request, string relativeUrl) {
            return String.Format("{0}://{1}{2}",
                            request.Url.Scheme,
                            request.Url.Authority,
                            VirtualPathUtility.ToAbsolute(relativeUrl));
        }
     }
    

    如下使用:

     HttpContext.Current.Request.GetFullUrl("~/MyOtherPage.aspx");
    

    也适用于虚拟目录,您不需要 MVC。

    【讨论】:

    • 这是唯一正确的答案。 VirtualPathUtility.ToAbsolute() 包括虚拟目录,所有其他答案都省略了该目录。您的 Web 应用程序并非总是托管在您域的最高级别,如果您现在不考虑这种可能性,您就是在自取其辱。
    【解决方案3】:

    你可以使用

    string FullUrl = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host + "/PDF/MyFile.pdf"
    

    它在 asp.net 中工作,我不确定 MVC,但它也应该工作。

    【讨论】:

    • 这主要是可行的,但要小心非默认端口。如果你在本地运行它,例如,你的开发站点在类似localhost:12345 上运行,这只会给你http://localhost/PDF/MyFile.pdf,这显然是行不通的。
    • 关闭,但您应该使用Request.Url.Authority 而不是Request.Url.Host 来处理需要用户名和密码的非标准端口和url。
    【解决方案4】:

    返回新的 System.Uri(Page.Request.Url, ResolveClientUrl("~/relative/path.aspx")).AbsoluteUri

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-29
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2015-01-24
      • 2018-10-15
      • 2017-03-16
      相关资源
      最近更新 更多