5

¿Alguien puede ayudar a aclarar el uso de la propiedad "StatusCode" en HttpWebResponse y WebException?C# HttpWebRequest.GetResponse: ¿cómo se maneja el uso de StatusCode para una respuesta de no excepción vs webexception?

Por ejemplo, parece que si:

a) no constituye una excepción, entonces el HttpWebResponse tendrá un StatusCode que podría tener algunos valores que indican tanto: - éxito (por ejemplo, OK, Aceptado etc) - fallo (por ejemplo useproxy, RequestTimeout etc)

b) hay una banda WebExeption, que en sí misma tiene un objeto de respuesta que de nuevo tiene un StatusCode (que supongo se basa en la misma enumeración HttpStatusCode.

pregunta 1 - ¿Hay alguna consistencia en términos de lo que StatusCode generará una WebException (y elegiría los detalles dentro de la excepción), frente a la cual regresaría sin una excepción pero encontraría el resultado en el StatusCode de el objeto de respuesta?

Pregunta 2 - O más específicamente cuál es el código pseduo (o C# código en sí mismo) para tratar de manejar una llamada HttpWebRequest.GetResponse tal que se quiere diferenciar entre las categorías de respuestas para el usuario:

  • configuración de proxy/proxy de tema => lo que puede decirle al usuario corregir la configuración del proxy

  • problema de conectividad/servidor web abajo => para que el usuario es consciente de esta

  • error del lado del servidor (p. servidor está ahí, pero hay un manejo de la solicitud de emisión - por ejemplo, el contenido no existe) => lo que el usuario puede aumentar con el administrador de sitio web

  • caso de éxito (y supongo que esto sería más que un simple permiso) => na (caso de éxito)

gracias

Respuesta

4

En mi experiencia el código de estado de respuesta sólo devuelve 200 ó 0. Cualquier otra cosa viene a través de la WebException, incluidos los errores de proxy como 407 o 417.

4

La WebException se lanza siempre que la solicitud web no pueda ejecutarse correctamente. Por ejemplo, 400 y 500 series de respuestas.

WebExcpetion tiene una propiedad llamada Estado que devolverá el estado real de la respuesta, es decir, 500 (Error interno del servidor).

Aquí está la lista de todos los códigos de respuesta: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

================================ ==========================

En general:

1xx serie de código = respuesta provisional. Estos no son códigos de error. Por ejemplo, la respuesta Continuar 100 que indica que el cliente debe continuar con su solicitud.Por lo general, WebRequest no devolverá dicha respuesta, y la manejará enviando el resto de la solicitud.

serie 2xx de código = La solicitud fue recibida, entendida y aceptada correctamente. Estos no son códigos de error. Por ejemplo, 200 OK

3xx series of code = Es necesario tomar otras medidas. Por lo general, este no es un código de error (por lo general es para la reorientación), por ejemplo, '301 Movido permanentemente', lo que significa que la solicitud de recursos se traslada a una nueva ubicación, por lo que cualquier solicitud del cliente debe estar en la nueva URL proporcionada en la respuesta.

O '305 Use Proxy', que según usted resulta en una excepción.

4xx series of code = Client errors. Estos pueden resultar en una excepción. por ejemplo '400 Bad Request' o '401 Unauthorized'

5xx series of code = Errores del servidor. Estos pueden resultar en una excepción. por ejemplo, '500 Internal Server Error' o '504 Gateway Timeout'

+0

Pero, ¿cuántos posibles códigos de retorno podrían existir para el caso de no excepción cuando obtiene una respuesta directamente? Hay un número de códigos de respuesta diferentes en el rango 200, por ejemplo. ¿O es la primera respuesta correcta aquí en que solo 200 o 0 son posibles para el caso de no excepción? – Greg

+0

Respuesta actualizada. – ata

+0

Gracias, entonces esto significaría que asumo que puede hacerlo, por ejemplo: una respuesta exitosa (es decir, no es una excepción) pero un código de estado de 300 donde en general sigue siendo un problema para el usuario? Entonces, para verificar el verdadero éxito, debe verificar si WebException + verifica el código de estado en el rango 200. – Greg

Cuestiones relacionadas