2009-04-16 11 views
2

Ich möchte den Status einer Seite überprüfen (404, verschoben, etc). Wie kann ich es tun? ATM Ich mache das unten, was mir nur sagt, ob die Seite existiert oder nicht. Auch, ich vermute, dass die Ausnahme mein Code macht langsam (i getestet)WebRequest erhalten Seite ohne Ausnahmen?

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; 
     } 

Antwort

1

Die HttpWebResponse Klasse stellt eine Eigenschaft Status, die einen Wert aus der Httpstatuscode-Enumeration zurück. Im Nicht-Fehler-Fall gibt dies direkt den Statuscode (404 nicht gefunden, 403 nicht autorisiert, 301 dauerhaft verschoben, 200 OK usw.). Im Fehlerfall stellt die WebException-Klasse eine Status-Eigenschaft zur Verfügung, die aus einer anderen Enumeration stammt, aber Sie können die Fälle identifizieren, die ich von Ihnen erwartet hätte.

+0

Ich denke, Sie sagen Theres keine Möglichkeit, die Seite Status w/o mit einer Ausnahme, wenn seine 404/403/etc zu bekommen. Ich werde es mir merken. –

+0

Ja, das Verhalten für einen dieser "fehlerhaften" HTTP-Status ist das Auslösen einer WebException. –

1

Sie können die HTTP-Fehlercode wie diese:

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