Existe uma maneira fácil de obter o código de status HTTP de um System.Net.WebException
?
c#
http-status-codes
webexception
Gilsham
fonte
fonte
Usando o operador nulo-condicional (
?.
), você pode obter o código de status HTTP com uma única linha de código:A variável
status
conterá oHttpStatusCode
. Quando houver uma falha mais geral, como um erro de rede em que nenhum código de status HTTP seja enviado,status
será nulo. Nesse caso, você pode inspecionarex.Status
para obter oWebExceptionStatus
.Se você deseja apenas que uma string descritiva faça logon em caso de falha, use o operador coalescente-nulo (
??
) para obter o erro relevante:Se a exceção for lançada como resultado de um código de status HTTP 404, a sequência conterá "NotFound". Por outro lado, se o servidor estiver offline, a cadeia conterá "ConnectFailure" e assim por diante.
fonte
?.
operador foi originalmente denominado operador de propagação nula ou operador condicional nulo durante a liberação da visualização. Mas o recarregador Atlassian emite um aviso para usar o operador de propagação nula em tais cenários. É bom saber que também é chamado de operador condicional nulo.isso funciona apenas se o WebResponse for um HttpWebResponse.
fonte
(Sei que a pergunta é antiga, mas está entre os principais hits do Google.)
Uma situação comum em que você deseja saber o código de resposta está no tratamento de exceções. A partir do C # 7, você pode usar a correspondência de padrões para realmente inserir apenas a cláusula catch se a exceção corresponder ao seu predicado:
Isso pode ser facilmente estendido para outros níveis, como neste caso em que na
WebException
verdade era a exceção interna de outro (e estamos interessados apenas em404
):Finalmente: observe como não há necessidade de lançar novamente a exceção na cláusula catch quando ela não corresponde aos seus critérios, pois não inserimos a cláusula em primeiro lugar com a solução acima.
fonte
Você pode tentar esse código para obter o código de status HTTP do WebException. Também funciona no Silverlight porque o SL não possui WebExceptionStatus.ProtocolError definido.
fonte
return 0
? ou melhorHttpStatusCode?
( anulável )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
Não tenho certeza se existe, mas se houvesse essa propriedade, não seria considerada confiável. A
WebException
pode ser acionada por outros motivos que não os códigos de erro HTTP, incluindo simples erros de rede. Aqueles não têm esse código de erro http correspondente.Você pode nos dar um pouco mais de informações sobre o que você está tentando realizar com esse código. Pode haver uma maneira melhor de obter as informações necessárias.
fonte