我需要编写一个工具,用C#报告损坏的URL.如果用户在浏览器中看到404错误,则URL应仅报告已损坏.我相信可能有一些技巧来处理进行URL重写的Web服务器.这就是我所拥有的.正如您所看到的,只有一些URL验证不正确.
string url = "";
// TEST CASES
//url = "http://newsroom.lds.org/ldsnewsroom/eng/news-releases-stories/local-churches-teach-how-to-plan-for-disasters"; //Prints "BROKEN", although this is getting re-written to good url below.
//url = "http://beta-newsroom.lds.org/article/local-churches-teach-how-to-plan-for-disasters"; // Prints "GOOD"
//url = "http://"; //Prints "BROKEN"
//url = "google.com"; //Prints "BROKEN" althought this should be good.
//url = "www.google.com"; //Prints "BROKEN" althought this should be good.
//url = "http://www.google.com"; //Prints "GOOD"
try
{
if (url != "")
{
WebRequest Irequest = WebRequest.Create(url);
WebResponse Iresponse = Irequest.GetResponse();
if (Iresponse != null)
{
_txbl.Text = "GOOD";
}
}
}
catch (Exception ex)
{
_txbl.Text = "BROKEN";
}
Run Code Online (Sandbox Code Playgroud)
其一,Irequest而Iresponse不应被命名为这样.他们应该只是webRequest和webResponse,甚至只是request和response.大写"I"前缀通常仅用于接口命名,而不用于实例变量.
要进行URL有效性检查,请使用UriBuilder获取Uri.然后你应该使用HttpWebRequest,HttpWebResponse以便你可以检查强类型状态代码响应.最后,你应该对被破坏的内容有所了解.
这里是我介绍的一些其他.NET内容的链接:
样品:
try
{
if (!string.IsNullOrEmpty(url))
{
UriBuilder uriBuilder = new UriBuilder(url);
HttpWebRequest request = HttpWebRequest.Create(uriBuilder.Uri);
HttpWebResponse response = request.GetResponse();
if (response.StatusCode == HttpStatusCode.NotFound)
{
_txbl.Text = "Broken - 404 Not Found";
}
if (response.StatusCode == HttpStatusCode.OK)
{
_txbl.Text = "URL appears to be good.";
}
else //There are a lot of other status codes you could check for...
{
_txbl.Text = string.Format("URL might be ok. Status: {0}.",
response.StatusCode.ToString());
}
}
}
catch (Exception ex)
{
_txbl.Text = string.Format("Broken- Other error: {0}", ex.Message);
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lse -1
问题是,我相信大多数“应该很好”的情况实际上是在浏览器级别处理的。如果您省略“http://”,则这是一个无效请求,但浏览器会为您添加该请求。
所以也许你可以做一个浏览器会做的类似检查:
| 归档时间: |
|
| 查看次数: |
11257 次 |
| 最近记录: |