Supongamos que tengo la siguiente variable:
System.Net.HttpStatusCode status = System.Net.HttpStatusCode.OK;
¿Cómo puedo comprobar si se trata de un código de estado de éxito o de fallo?
Por ejemplo, puedo hacer lo siguiente:
int code = (int)status;
if(code >= 200 && code < 300) {
//Success
}
También puedo tener algún tipo de lista blanca:
HttpStatusCode[] successStatus = new HttpStatusCode[] {
HttpStatusCode.OK,
HttpStatusCode.Created,
HttpStatusCode.Accepted,
HttpStatusCode.NonAuthoritativeInformation,
HttpStatusCode.NoContent,
HttpStatusCode.ResetContent,
HttpStatusCode.PartialContent
};
if(successStatus.Contains(status)) //LINQ
{
//Success
}
Ninguna de estas alternativas me convence, y esperaba una clase o método .NET que pudiera hacer este trabajo por mí, como:
bool isSuccess = HttpUtilities.IsSuccess(status);
c#
.net
system.net
Matias Cicero
fuente
fuente
int code = (int)Response.StatusCode
desde allí, deberá crear su propioEnum
cheque aquí para el ejemplo de trabajo stackoverflow.com/questions/1330856/…HttpClient
clase?HttpResponseMessage
por ejemploHttpResponseMessage.IsSuccessStatusCode
(vea mi respuesta), que es exactamente la misma que su primer enfoque, y convertirla en un método de extensión en elHttpStatusCode
tipo.Respuestas:
Si estás usando la
HttpClient
clase, obtendrás unHttpResponseMessage
respaldo.Esta clase tiene una propiedad útil llamada
IsSuccessStatusCode
que hará la verificación por usted.En caso de que tenga curiosidad, esta propiedad se implementa como:
Por lo que sólo puede volver a utilizar este algoritmo si estás no usar
HttpClient
directamente.También puede usar
EnsureSuccessStatusCode
para lanzar una excepción en caso de que la respuesta no haya sido exitosa.fuente
La clase HttpResponseMessage tiene una propiedad IsSuccessStatusCode, mirando el código fuente es así, como usr ya ha sugerido que 200-299 es probablemente lo mejor que puede hacer.
fuente
La respuesta aceptada me molesta un poco ya que contiene números mágicos, (aunque están en estándar) en su segunda parte. Y la primera parte no es genérica para los códigos de estado enteros simples, aunque está cerca de mi respuesta.
Puede lograr exactamente el mismo resultado creando una instancia de HttpResponseMessage con su código de estado y verificando el éxito. Lanza una excepción de argumento si el valor es menor que cero o mayor que 999.
Esto no es exactamente conciso, pero podría convertirlo en una extensión.
fuente
IsSuccessStatusCode
genial, úselo (como dice la respuesta aceptada). De lo contrario, no agregue su propio cruft utilizando una abstracción a menos que esté realizando esta verificación por todas partesHttpResponseMessage
para usar una de sus propiedades lleva más tiempo que verificar dos condiciones lógicas conint
.Agregar a la respuesta de @TomDoesCode Si está utilizando HttpWebResponse, puede agregar este método de extensión:
fuente
Soy partidario de la posibilidad de descubrir los métodos de extensión.
Siempre que su espacio de nombres esté dentro del alcance, el uso sería
statusCode.IsSuccessStatusCode()
.fuente
HttpStatusCode
alcance? Hay muchas bibliotecas que no usan niHttpResponseMessage
aparecen, pero le brindan el código de estado.Depende del recurso HTTP al que llame. Por lo general, el
2xx
rango se define como el rango de códigos de estado de éxito. Esa es claramente una convención a la que no se adherirán todos los servidores HTTP.Por ejemplo, enviar un formulario en un sitio web a menudo devolverá un redireccionamiento 302.
Si desea idear un método general, la
code >= 200 && code < 300
idea probablemente sea su mejor opción.Si está llamando a su propio servidor, probablemente debería asegurarse de estandarizar
200
.fuente
Esta es una extensión de la respuesta anterior, que evita la creación y posterior recolección de basura de un nuevo objeto para cada invocación.
fuente