Estou usando a WebClient
classe para postar alguns dados em um formulário da web. Gostaria de obter o código de status de resposta do envio do formulário. Até agora, descobri como obter o código de status se houver uma exceção
Catch wex As WebException
If TypeOf wex.Response Is HttpWebResponse Then
msgbox(DirectCast(wex.Response, HttpWebResponse).StatusCode)
End If
No entanto, se o formulário for enviado com êxito e nenhuma exceção for lançada, não saberei o código de status (200.301.302, ...)
Existe alguma maneira de obter o código de status quando não há exceções lançadas?
PS: Prefiro não usar httpwebrequest / httpwebresponse
Você pode verificar se o erro é do tipo
WebException
e, em seguida, inspecionar o código de resposta;ou
fonte
Existe uma maneira de fazer isso usando reflexão. Funciona com .NET 4.0. Ele acessa um campo privado e pode não funcionar em outras versões do .NET sem modificações.
Não tenho ideia de por que a Microsoft não expôs este campo com uma propriedade.
fonte
Se você estiver usando .Net 4.0 (ou menos):
Se você estiver usando .Net 4.5.X ou mais recente, mude para HttpClient :
fonte
A resposta de Erik não funciona no Windows Phone como está. O seguinte faz:
Pelo menos faz ao usar
OpenReadAsync
; para outrosxxxAsync
métodos, um teste cuidadoso seria altamente recomendado. A estrutura chama GetWebResponse em algum lugar ao longo do caminho do código; tudo o que se precisa fazer é capturar e armazenar em cache o objeto de resposta.O código substituto é 200 neste snippet porque erros HTTP genuínos - 500, 404, etc - são relatados como exceções de qualquer maneira. O objetivo deste truque é capturar códigos que não sejam de erro, no meu caso específico 304 (Não modificado). Portanto, o fallback assume que, se o código de status estiver de alguma forma indisponível, pelo menos ele não está errado.
fonte
Você deveria usar
fonte
However if the form is submitted successfully and no exception is thrown...
É o que eu uso para expandir a funcionalidade do WebClient. StatusCode e StatusDescription sempre conterão o código / descrição de resposta mais recente.
Assim, você pode fazer uma postagem e obter o resultado via:
fonte
Apenas no caso de alguém precisar de uma versão em F # do hack descrito acima.
fonte
Você deve ser capaz de usar a chamada "client.ResponseHeaders [..]", consulte este link para exemplos de como obter informações da resposta
fonte
Você pode tentar este código para obter o código de status HTTP de WebException ou de OpenReadCompletedEventArgs.Error. Também funciona no Silverlight porque o SL não tem WebExceptionStatus.ProtocolError definido.
fonte