Tengo el siguiente código:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Credentials = MyCredentialCache;
try
{
request.GetResponse();
}
catch
{
}
¿Cómo puedo detectar un error 404 específico? WebExceptionStatus.ProtocolError solo puede detectar que ocurrió un error, pero no proporcionar el código exacto del error.
Por ejemplo:
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw ex;
}
}
No es lo suficientemente útil ... la excepción del protocolo podría ser 401, 503, 403, cualquier cosa en realidad.
System.Exception
y no dependas del texto de excepción en tu controlador!throw ex
, generará una nueva excepción con una pila de llamadas vacía. Solo usathrow
.WebRequest
Respuestas:
Utilice el
HttpStatusCode Enumeration
, específicamenteHttpStatusCode.NotFound
Algo como:
¿Dónde
we
está unWebException
.fuente
we.Response
no lo esHttpWebResponse
. Si el código desea asumir que siempre va a tener ese tipo, entonces simplemente echa:HttpWebResponse errorResponse = (HttpWebResponse)we.Response;
. Esto arrojará un explícitoInvalidCastException
si sucede lo imposible, en lugar de un misteriosoNullReferenceException
.An object reference is required for the non-static field, method, or property 'WebException.Response'
usar este código.fuente
throw
(relanzamiento) al final de tucatch
, de lo contrario, esto simplemente comerá silenciosamente cualquier otro tipo deWebException
.WebRequest
no implementaIDisposable
.En C # 6 puede usar filtros de excepción .
fuente
No lo he probado, pero debería funcionar
fuente
catch
bloque, ya que tenía exactamente el mismo código en el intento que el OP. Realmente deberías estar bajando esta pregunta por completo debido al código del OP.Creo que si detecta una WebException, hay información que puede usar para determinar si era un 404. Esa es la única forma que conozco en este momento ... Me interesaría conocer otras ...
fuente
Mira este snipit. GetResponse lanzará una WebRequestException. Capture eso y puede obtener el código de estado de la respuesta.
esto vino de http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx
fuente
Detecte el tipo de excepción adecuado
WebException
:fuente
e.Response
asHttpWebResponse
antes de obtener acceso alStatusCode
.Consulte en MSDN sobre el estado de la respuesta:
fuente
Para la gente de VB.NET que navega por esto, creo que podemos detectar la excepción solo si realmente es un 404. Algo como:
fuente
cuando POST o GET datos al servidor usando la clase WebRequest, entonces el tipo de excepción sería WebException. A continuación se muestra el código para la excepción de archivo no encontrado
fuente