如何检查两个不同的URL是否指向同一个资源?

时间:2010-06-29 18:27:42

标签: c# .net wcf url uri

假设我有一个名为“linux”的计算机上托管的网站,它是两个不同网络的一部分,地址为192.168.1.1和10.1.1.1。在“linux”本地工作时,我可以通过以下URL访问此网站:

http://192.168.1.1/  http://10.1.1.1/  http://linux/  http://localhost/  http://127.0.0.1/

使用网络上的另一台机器“10.1.1.0/24”我可以使用以下内容:

http://10.1.1.1/  http://linux/

但是在“192.168.1.0/24”上我只能使用:

http://192.168.1.1/  http://linux/

我正在开发一个比较网址的应用程序,如果它们指向同一个资源,则在此应用程序的上下文中,两个网址是相等的。

使用C#中的URI类是否可以快速进行这种比较?

2 个答案:

答案 0 :(得分:3)

URI类没有办法帮助你;它只能确定两个URI是否是相同的URI,如果它们具有相同的服务器名称/ IP地址,则它们只是相同的URI。

最佳选择是从两个URL下载资源,并通过检查相等性并假设两个资源是相同的资源(如果它们是相同的位序列)来查看它是否是相同的资源。

  

这对我来说不是一个选择,性能成本可能太高了。我希望有一些东西可以匹配URI的'主机地址'部分,然后剩下要比较的就是相对路径和端口...... - Thiado de Arruda

不幸的是,框架中没有任何内容能够实现您想要的开箱即用,因为没有可靠的方法将不同的主机名映射到同一主机,因此也就是相同的资源。

您必须将主机映射到这些主机的各种别名,并自行查询。 URI.Host属性将为您获取相关URI的主机名,但您必须自己翻译它。框架中的任何内容都无法为您完成。

答案 1 :(得分:0)

你可以用漂亮的汤使用python(刮掉页面并检查一些元素是否相同)这样做,但是因为你需要提取实际的网络数据所以会慢一点。