当前位置:  开发笔记 > 后端 > 正文

如何将相对URL转换为完整URL?

如何解决《如何将相对URL转换为完整URL?》经验,为你挑选了4个好方法。

用一个例子可以更容易地解释这一点.我正试图找到一种方法将相对URL,例如"/Foo.aspx"或"〜/ Foo.aspx"转换为完整的URL,例如http://localhost/Foo.aspx.这样,当我部署到测试或阶段时,网站运行的域名不同,我将获得http://test/Foo.aspx和http://stage/Foo.aspx.

有任何想法吗?



1> Oli..:

玩这个(从这里修改)

public string ConvertRelativeUrlToAbsoluteUrl(string relativeUrl) {
    return string.Format("http{0}://{1}{2}",
        (Request.IsSecureConnection) ? "s" : "", 
        Request.Url.Host,
        Page.ResolveUrl(relativeUrl)
    );
}


如果端口不是默认端口(80),则不起作用.此外,空字符文字对我不起作用.`Page.ResolveUrl`只能在[Page](http://refactoringaspnet.blogspot.in/2009/09/different-approaches-for-resolving-urls.html)的上下文中调用.我将代码调整为:`return string.Format("{0}:// {1} {2} {3}",(Request.IsSecureConnection)?"https":"http",Request.Url.Host, (Request.Url.Port == 80)?"":":"+ Request.Url.Port.ToString(),VirtualPathUtility.ToAbsolute(relativeUrl)`
请注意:当我使用它时,我在主机和页面URL之间添加了Request.URL.Port,因此它可以在Visual Web Dev测试服务器上运行.
我希望ASP .NET内置一些东西,所以我不必深入研究协议,端口等所有业务,但这应该可以完成.

2> Josh M...:

这个被击败了,但我想我会发布自己的解决方案,我认为它比许多其他答案更清晰.

public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues)
{
    return url.Action(actionName, controllerName, routeValues, url.RequestContext.HttpContext.Request.Url.Scheme);
}

public static string AbsoluteContent(this UrlHelper url, string path)
{
    Uri uri = new Uri(path, UriKind.RelativeOrAbsolute);

    //If the URI is not already absolute, rebuild it based on the current request.
    if (!uri.IsAbsoluteUri)
    {
        Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
        UriBuilder builder = new UriBuilder(requestUrl.Scheme, requestUrl.Host, requestUrl.Port);

        builder.Path = VirtualPathUtility.ToAbsolute(path);
        uri = builder.Uri;
    }

    return uri.ToString();
}


我找到了这个.谢谢.我添加了一个小改动,避免了硬编码的URl方案:`code` return url.Action(actionName,controllerName,routeValues,url.RequestContext.HttpContext.Request.Url.Scheme); `code`
+1这很有效,除了返回的URL包含请求URL的查询字符串.我建议的编辑修复此问题.

3> 小智..:

你只需要使用它创建一个新的URI page.request.url然后得到AbsoluteUri它:

New System.Uri(Page.Request.Url, "Foo.aspx").AbsoluteUri


@ebyrob Uri(Uri,string)构造函数删除第一个参数的任何相对部分,然后将它与第二个参数组合.[Uri构造函数](https://msdn.microsoft.com/en-us/library/9hst1w91(v = vs.110).aspx)上的MSDN文档没有明确说明这个[小提琴测试](https: //dotnetfiddle.net/WHUjkY)验证行为.

4> 小智..:

这是我的帮手功能

public string GetFullUrl(string relativeUrl) {
    string root = Request.Url.GetLeftPart(UriPartial.Authority);
    return root + Page.ResolveUrl("~/" + relativeUrl) ;
}

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有