我有一个包含URL的变量。
string url;它可能包含回循环主机名。例如,它的价值可以是:
http://localhost/x我想确保URL可以从访问当前计算机的另一台计算机上使用。如果它是一个循环回URL,这是行不通的。
例如,如果当前计算机的域名是webserver.company.local,我如何以编程方式替换回循环URL的主机名这个值?
请注意,这是针对ASP.NET应用程序的,但我也对通用解决方案感兴趣。
发布于 2013-06-13 04:10:57
解决此问题的一种方法是执行以下步骤:
Uri.IsLoopback。Dns类来完成。UriBuilder来完成。给定此方法签名:
Uri MakeExternallyUsable(Uri uri)以下是实现所需结果的两个实现:
通解
可以使用Dns.GetHostName获取可能完全限定的主机名。然而,我认为使用完全限定的主机名会更加健壮.在这个答案中提出了一种这样做的机制。
如果使用此方法,请确保考虑所需的权限和可能的异常。
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获得主机名对我来说是合适的。修改上述实现以使用此主机名:
/*Get HTTP request*/.Url.Hosthttps://stackoverflow.com/questions/17078046
复制相似问题