有没有可靠的方法来验证网址的存在?

时间:2015-07-22 17:24:17

标签: c# validation asp.net-mvc-4 url ping

我有一个C#MVC4网站,称之为foo.org。其中有“页面”,例如foo.org/news或foo.org/events。这是一个http网站,而不是https。

我有另一个C#MVC4网站,也是一个http网站,管理第一个(在同一个网络服务器上)。在后一个网站中,我需要在第一个网站中验证诸如“foo.org/news”之类的页面的存在。

两者都是内部网站。

foo.org/news和foo.org/events实际上是有效页面。如果我要将他们的网址打到浏览器的地址栏上,他们会出现,......没问题。

我尝试了来自SO和其他论坛的几条建议也无济于事。

我尝试的事情:

HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse);
var retval = (response.StatusCode == HttpStatusCode.OK);
response.Close();
return retval;

var pingSender = new Ping();
var options = new PingOptions();
options.DontFragment = true;
var data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
var buffer = Encoding.ASCII.GetBytes(data);
var timeout = 120;
var reply = pingSender.Send(uri, timeout, buffer, options);
return (reply.Status == IPStatus.Success);

IPHostEntry ipHost = Dns.GetHostEntry(safeHost);
return (ipHost.HostName != null && ipHost.HostName != "");

在每一篇文章中,我尝试使用和不使用“http://”。

现在我通过一个接一个地尝试将所有3个结合起来并返回我遇到的第一个成功。我可以验证google.com或foo.org等网址,但是当我在foo.org上附加“/ news”时就不会这样做。

上面的代码并不完全像我所拥有的那样,只是它的内容。

1 个答案:

答案 0 :(得分:3)

根据他们从最差到最佳验证网址的效果对您的选项进行排序:

  • 您的第3个选项仅查找URL的DNS记录。即使没有Web服务器正在侦听该IP,它也将返回true。
  • 第二个选项将ping网络服务器,但不能保证允许ping(这会产生误报)或者设备响应是实际的网络服务器(会产生误报)。
  • 第一个选项将与网络服务器通信以验证页面,但并非所有服务器都会正确响应HEAD请求(在这种情况下可能是您的问题)。这仍然会有误报和漏报,但它比上述选项更好。
  • 第一个选项的变体是将HTTP方法更改为GET请求。这将询问网络服务器的实际网页。这将给出最正确的答案,以查看网页是否存在,但总会有一些情况下您将无法得到正确的答案。