2009-03-23 14 views
7

Digamos que creo y ejecuto un System.Net.FtpWebRequest.Captura de una WebException específica (550)

Puedo usar catch (WebException ex) {} para atrapar cualquier excepción relacionada con la web generada por esta solicitud. Pero, ¿qué ocurre si tengo alguna lógica que solo deseo ejecutar cuando se lanza la excepción debido al (550) file not found?

¿Cuál es la mejor manera de hacerlo? Podría copiar el mensaje de excepción y probar la igualdad:

const string fileNotFoundExceptionMessage = 
    "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."; 
if (ex.Message == fileNotFoundExceptionMessage) { 

Pero teóricamente parece que este mensaje podría cambiar en el futuro.

O bien, podría probar para ver si el mensaje de excepción contiene "550". Es probable que este enfoque funcione más si se cambia el mensaje (probablemente aún contenga "550" en algún lugar del texto). Pero, por supuesto, una prueba de este tipo también volvería a ser verdadera si el texto de algún otro WebException contiene "550".

No parece haber un método para acceder solo al número de la excepción. es posible?

Respuesta

14

WebException expone una propiedad StatusCode que usted puede verificar.

Si desea que el código de respuesta HTTP real que usted puede hacer algo como esto:

(int)((HttpWebResponse)ex.Response).StatusCode 
-1

declarar un objeto WebException, echando el valor de su ex bloque Catch a ella. Luego puede verificar la propiedad StatusCode.

+0

La captura de un 'WebException' sólo le dará un'Estado' de ProtocolError ** **. Debe enviar la respuesta ex a HttpWebResponse como en la respuesta anterior para obtener el código deseado (es decir, 404, 500). – ProKiner

3

Como referencia, aquí está el código real que terminé usando:

catch (WebException ex) { 
    if (ex.Status == WebExceptionStatus.ProtocolError && 
     ((FtpWebResponse)ex.Response).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) { 
     // Handle file not found here 
    } 
Cuestiones relacionadas