【问题标题】:Is there a surefire way to validate the existence of a URL?是否有可靠的方法来验证 URL 的存在?
【发布时间】:2015-10-12 17:34:45
【问题描述】:

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

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

两者都是 Intranet 站点。

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

上面的代码和我的不完全一样,只是它的肉。

【问题讨论】:

  • 只有您的第一个选项才能真正检查网页。当你尝试它时它会返回什么?把方法改成“Get”能行吗?
  • 我的天哪...开始工作!这么简单的解决方案。我仍然需要保留其他方法以及使用 HEAD 验证其他 URL 的第一个版本。但再次感谢。也许您可以发布一个实际的回复帖子,这样我就可以标记它并给您一个“答案”。
  • 请注意,您实际上并没有验证网页的存在性,只是它当前的可用性。如果服务器关闭了一段时间,这并不意味着该页面不存在(无法验证存在)只是它不可用。当服务器重新启动时,它将再次可用。
  • 我明白你的意思。尽管我可能会争论说网页不可用可能意味着它不存在,至少在测试期间是这样。但我同意,我应该将问题表述为“测试 URL 的可用性”。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2020-11-17
    • 2021-07-13
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多