首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式将环回URL转换为外部可用的URL?

问如何以编程方式将环回URL转换为外部可用的URL?
EN

Stack Overflow用户
提问于 2013-06-13 01:53:12
回答 1查看 474关注 0票数 0

我有一个包含URL的变量。

代码语言:javascript
复制
string url;

它可能包含回循环主机名。例如,它的价值可以是:

代码语言:javascript
复制
http://localhost/x

我想确保URL可以从访问当前计算机的另一台计算机上使用。如果它是一个循环回URL,这是行不通的。

例如,如果当前计算机的域名是webserver.company.local,我如何以编程方式替换回循环URL的主机名这个值?

请注意,这是针对ASP.NET应用程序的,但我也对通用解决方案感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 04:10:57

解决此问题的一种方法是执行以下步骤:

  1. 确定URL是否是循环回传。如果是,请继续进行。其中一种方法是使用Uri.IsLoopback。
  2. 确定当前计算机的DNS主机名。这可以使用静态Dns类来完成。
  3. 用当前计算机的URL替换URL的主机名部分。这可以使用UriBuilder来完成。

给定此方法签名:

代码语言:javascript
复制
Uri MakeExternallyUsable(Uri uri)

以下是实现所需结果的两个实现:

通解

可以使用Dns.GetHostName获取可能完全限定的主机名。然而,我认为使用完全限定的主机名会更加健壮.在这个答案中提出了一种这样做的机制。

如果使用此方法,请确保考虑所需的权限和可能的异常。

代码语言:javascript
复制
if (uri.IsLoopback)
{
    var builder = new UriBuilder(uri)
    {
        Host = Dns.GetHostEntry("LocalHost").HostName
    };

    return builder.Uri;
}
else
    return uri;

ASP.NET

在ASP.NET响应的上下文中,我认为当前计算机的主机名不一定与请求者使用的主机名称相同。此外,计算机可能有多个不同的相关主机名。因此,从HTTP请求的URL获得主机名对我来说是合适的。修改上述实现以使用此主机名:

代码语言:javascript
复制
/*Get HTTP request*/.Url.Host
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17078046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档