Estoy usando la WebClient
clase para publicar algunos datos en un formulario web. Me gustaría obtener el código de estado de respuesta del envío del formulario. Hasta ahora he descubierto cómo obtener el código de estado si hay una excepción
Catch wex As WebException
If TypeOf wex.Response Is HttpWebResponse Then
msgbox(DirectCast(wex.Response, HttpWebResponse).StatusCode)
End If
Sin embargo, si el formulario se envía correctamente y no se lanza ninguna excepción, entonces no sabré el código de estado (200,301,302, ...)
¿Hay alguna forma de obtener el código de estado cuando no se lanzan excepciones?
PD: prefiero no usar httpwebrequest / httpwebresponse
Puede verificar si el error es de tipo
WebException
y luego inspeccionar el código de respuesta;o
fuente
Hay una forma de hacerlo mediante la reflexión. Funciona con .NET 4.0. Tiene acceso a un campo privado y puede que no funcione en otras versiones de .NET sin modificaciones.
No tengo idea de por qué Microsoft no expuso este campo con una propiedad.
fuente
Si está utilizando .Net 4.0 (o menos):
Si está utilizando .Net 4.5.X o más reciente, cambie a HttpClient :
fuente
La respuesta de Erik no funciona en Windows Phone como está. Lo siguiente hace:
Al menos lo hace cuando se usa
OpenReadAsync
; para otrosxxxAsync
métodos, se recomienda encarecidamente realizar pruebas cuidadosas. El marco llama a GetWebResponse en algún lugar de la ruta del código; todo lo que hay que hacer es capturar y almacenar en caché el objeto de respuesta.El código de reserva es 200 en este fragmento porque los errores HTTP genuinos (500, 404, etc.) se informan como excepciones de todos modos. El propósito de este truco es capturar códigos que no sean de error, en mi caso específico 304 (No modificado). Entonces, el respaldo asume que si el código de estado no está disponible de alguna manera, al menos no es erróneo.
fuente
Deberías usar
fuente
However if the form is submitted successfully and no exception is thrown...
Esto es lo que uso para expandir la funcionalidad de WebClient. StatusCode y StatusDescription siempre contendrán el código / descripción de respuesta más reciente.
Por lo tanto, puede hacer una publicación y obtener un resultado a través de:
fuente
En caso de que alguien más necesite una versión F # del truco descrito anteriormente.
fuente
Debería poder utilizar la llamada "client.ResponseHeaders [..]". Consulte este enlace para ver ejemplos de cómo recuperar cosas de la respuesta.
fuente
Puede probar este código para obtener el código de estado HTTP de WebException o de OpenReadCompletedEventArgs.Error. También funciona en Silverlight porque SL no tiene definido WebExceptionStatus.ProtocolError.
fuente