c# - 是否有可靠的方法来验证 URL 的存在?

标签 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 实际上是有效页面。如果我在浏览器的地址栏上输入它们的 URL,它们就会出现,......没问题。

我尝试了 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 之类的网址,但当我将“/news”附加到 foo.org 时则无法验证。

上面的代码与我的不完全一样,只是其中的内容。

最佳答案

根据它们验证 URL 的程度从最差到最好对您的选项进行排序:

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

关于c# - 是否有可靠的方法来验证 URL 的存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569976/

相关文章:

c# - 非阻塞锁定——概念验证和后续工作

php - 有没有办法同时清理多个变量?

ReactJS 中验证密码的正则表达式

c# - 在 asp net mvc 5 中使用 session 变量进行授权

asp.net-mvc-4 - 如何使用 MVCSitemapProvider 从 ASP.NET MVC4 中的父站点地图链接到子站点地图文件?

c# - 未正确实现 IDisposable 的后果

c# - 通过 DbContext.SaveChanges() 获取删除的行数和编辑的行数

algorithm - 使用 python 检查有效的信用卡号

asp.net-mvc-4 - HttpContextBase 如何向 ninject 注册?我没有明确绑定(bind)它

c# - 在 asp.net 中从母版页获取值到子页