2012-03-01 24 views
9

Estoy escribiendo una aplicación para verificar el estado de algunas aplicaciones web internas. Algunas de estas aplicaciones usan la autenticación de Windows. Cuando uso este código para verificar el estado, arroja The remote server returned an error: (401) Unauthorized.. Lo cual es comprensible porque no he proporcionado ninguna credencial al sitio web, así que no estoy autorizado.
Cómo ignorar el error 401 no autorizado de webrequest para obtener el estado del sitio web

WebResponse objResponse = null; 
WebRequest objRequest = HttpWebRequest.Create(website); 
objResponse = objRequest.GetResponse(); 


¿Hay una manera de ignorar el error 401 sin hacer algo como esto?

WebRequest objRequest = HttpWebRequest.Create(website); 

try 
{ 
    objResponse = objRequest.GetResponse(); 
} 
catch (WebException ex) 
{ 
    //Catch and ignore 401 Unauthorized errors because this means the site is up, the app just doesn't have authorization to use it. 
    if (!ex.Message.Contains("The remote server returned an error: (401) Unauthorized.")) 
    { 
     throw; 
    }      
} 
+0

¿Qué quiere decir con 'ignorar' aquí, pasar a la página siguiente? –

+1

Probablemente no ayude con la excepción en absoluto, pero debería hacer una solicitud HEAD ya que es más ligera y maneja bien esta situación. –

+0

@HenkHolterman O bien una propiedad que hace que webrequest no arroje una excepción o simplemente se trague la excepción como he indicado anteriormente. – guanome

Respuesta

3

Cuando el servidor está funcionando o no obtendrá una excepción de tiempo de espera. Sé que la única forma de manejar eso es con un try/catch.

Estoy seguro de que este es el caso para la mayoría de los errores (401/404/501), por lo tanto: No, no puede ignorar (prevenir) las excepciones, pero tendrá que manejarlas. Son la única forma de obtener la mayoría de los StatusCodes que está buscando su aplicación.

2

El cortocircuito es que usted querrá comprobar el myHttpWebResponse.StatusCode para el código de estado y actuar en consecuencia.

código de ejemplo de reference:

public static void GetPage(String url) 
    { 
     try 
      { 
       // Creates an HttpWebRequest for the specified URL. 
       HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
       // Sends the HttpWebRequest and waits for a response. 
       HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
       if (myHttpWebResponse.StatusCode == HttpStatusCode.OK) 
        Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}", 
             myHttpWebResponse.StatusDescription); 
       // Releases the resources of the response. 
       myHttpWebResponse.Close(); 

      } 
     catch(WebException e) 
      { 
       Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status); 
      } 
     catch(Exception e) 
     { 
      Console.WriteLine("\nThe following Exception was raised : {0}",e.Message); 
     } 
    } 
+2

La excepción se arroja en 'objResponse = objRequest.GetResponse();', por lo que no puedo verificar la respuesta porque la respuesta nunca se establece. Si quiere decir en la excepción, me dará un 'ProtocolError', por lo que todavía tendrá que examinar el mensaje de excepción para ver cuál era realmente el código de estado. – guanome

18

sugeriría probar este:

 try 
     { 
      objResponse = objRequest.GetResponse() as HttpWebResponse; 
     } 
     catch (WebException ex) 
     { 
      objResponse = ex.Response as HttpWebResponse; 
     } 
     finally 

El WebException tiene la respuesta toda la información que desea.

Cuestiones relacionadas