2009-04-16 3 views
2

Je veux vérifier l'état d'une page (404, déplacé, etc.). Comment puis-je le faire? ATM je fais le ci-dessous qui me dit seulement si la page existe ou non. De plus, je soupçonne que l'exception rend mon code lent (je l'ai testé)WebRequest obtenir la page sans exception?

static public bool CheckExist(string url) 
     { 
      HttpWebRequest wreq = null; 
      HttpWebResponse wresp = null; 
      bool ret = false; 

      try 
      { 
       wreq = (HttpWebRequest)WebRequest.Create(url); 
       wreq.KeepAlive = true; 
       //wreq.Method = "HEAD"; 
       wresp = (HttpWebResponse)wreq.GetResponse(); 
       ret = true; 
      } 
      catch (System.Net.WebException) 
      { 
      } 
      finally 
      { 
       if (wresp != null) 
        wresp.Close(); 
      } 
      return ret; 
     } 

Répondre

1

La classe HttpWebResponse expose une propriété StatusCode qui retourne une valeur de l'ENUM HttpStatusCode. Dans le cas de non-erreur, cela vous donne directement le code d'état (404 non trouvé, 403 non autorisé, 301 déplacé définitivement, 200 OK et ainsi de suite). Dans le cas d'erreur, la classe WebException expose une propriété Status - provenant d'une énumération différente, mais vous serez en mesure d'identifier les cas que vous voulez.

+0

Je pense que vous dire Theres aucun moyen d'obtenir le statut de la page w/o ayant une exception lorsque sa 404/403/etc. Je vais garder cela à l'esprit. –

+0

Oui, le comportement de l'un de ces états HTTP "erronés" consiste à lancer une exception WebException. –

1

Vous pouvez obtenir le code d'erreur HTTP comme ceci:

catch (System.Net.WebException e) 
{ 
    int HttpStatusCode = (int)((HttpWebResponse)e.Response).StatusCode; 
}