¿Hay una manera fácil de obtener el código de estado HTTP de a System.Net.WebException
?
c#
http-status-codes
webexception
Gilsham
fuente
fuente
Al usar el operador condicional nulo (
?.
) puede obtener el código de estado HTTP con una sola línea de código:La variable
status
contendrá elHttpStatusCode
. Cuando hay una falla más general como un error de red donde nunca se envía un código de estado HTTP, entoncesstatus
será nulo. En ese caso, puede inspeccionarex.Status
para obtener elWebExceptionStatus
.Si solo desea que se registre una cadena descriptiva en caso de falla, puede usar el operador de fusión nula (
??
) para obtener el error relevante:Si se produce la excepción como resultado de un código de estado HTTP 404, la cadena contendrá "NotFound". Por otro lado, si el servidor está fuera de línea, la cadena contendrá "ConnectFailure" y así sucesivamente.
fuente
?.
operador se denominó originalmente operador de propagación nulo o operador condicional nulo durante la versión de vista previa. Pero Atlassian Resharper da una advertencia para usar un operador de propagación nulo en tales escenarios. Es bueno saber que también se llama operador condicional nulo.esto funciona solo si WebResponse es un HttpWebResponse.
fuente
(Me doy cuenta de que la pregunta es antigua, pero está entre los principales éxitos de Google).
Una situación común en la que desea conocer el código de respuesta es el manejo de excepciones. A partir de C # 7, puede usar la coincidencia de patrones para ingresar solo la cláusula catch si la excepción coincide con su predicado:
Esto puede extenderse fácilmente a otros niveles, como en este caso donde en
WebException
realidad era la excepción interna de otro (y solo nos interesa404
):Finalmente: tenga en cuenta que no es necesario volver a lanzar la excepción en la cláusula catch cuando no coincide con sus criterios, ya que no ingresamos la cláusula en primer lugar con la solución anterior.
fuente
Puede probar este código para obtener el código de estado HTTP de WebException. También funciona en Silverlight porque SL no tiene WebExceptionStatus.ProtocolError definido.
fuente
return 0
? o mejorHttpStatusCode?
( anulable )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
No estoy seguro de si existe, pero si existiera dicha propiedad, no se consideraría confiable. A
WebException
puede ser despedido por otros motivos que no sean códigos de error HTTP, incluidos simples errores de red. Los que no tienen ese código de error http coincidente.¿Puede darnos un poco más de información sobre lo que está tratando de lograr con ese código? Puede haber una mejor manera de obtener la información que necesita.
fuente