如何在c#中验证URL(错误404)

use*_*303 5 c#

我需要编写一个工具,用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)

Mik*_*las 8

其一,IrequestIresponse不应被命名为这样.他们应该只是webRequestwebResponse,甚至只是requestresponse.大写"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)

  • 这段代码很好,但是我会使用UriBuilder(http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx)来创建Uri.这将删除方案周围的字符串操作(即"http://"),因为它将接受或不接受然后您可以检查"Scheme"属性,并将其设置为适当. (4认同)

Jam*_*lse -1

问题是,我相信大多数“应该很好”的情况实际上是在浏览器级别处理的。如果您省略“http://”,则这是一个无效请求,但浏览器会为您添加该请求。

所以也许你可以做一个浏览器会做的类似检查:

  • 确保开头有“http://”
  • 确保有“www”。一开始

  • 并不真地。在浏览器之外使用 URL 有很多原因(例如,就像这个问题一样),并且浏览器实际上是唯一允许您省略协议前缀的宽容软件。此外,子域(如果有的话)不需要以“www”开头。是有效的。 (2认同)