【发布时间】: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