Pregunta Cómo devolver HTTP 429?


Estoy implementando una API usando WCF y la especificación dice que devuelva HTTP 429 en ciertas circunstancias.

Normalmente, simplemente escribo:

throw new WebFaultException(HttpStatusCode.NotFound);

Sin embargo, la enumeración HttpStatusCode no contiene un 429.

Obviamente puedo lanzar a la enumeración

throw new WebFaultException((HttpStatusCode)429);

Sin embargo, me preocupa que esto no produzca el resultado correcto para la aplicación que llama a mi API.

¿Cuál es la mejor manera de crear ampliar HttpStatusCode y enviar estados HTTP válidos (pero no compatibles)?


32
2018-03-25 13:50


origen


Respuestas:


Desde el Especificación del lenguaje C # 5.0:

El conjunto de valores que puede adoptar un tipo enum no está limitado por su   enum miembros. En particular, cualquier valor del tipo subyacente de un   enum se puede convertir al tipo enum y es un valor válido distinto de   ese tipo enum.

Así que esto está completamente bien y sería tu mejor apuesta:

throw new WebFaultException((System.Net.HttpStatusCode)429);

27
2018-03-25 20:18



Si aloja el servicio WCF con IIS, puede activar Modo de compatibilidad ASP.Net. Una vez hecho esto, puede establecer el estado de HttpContext.Current.Response.StatusCode a 429.

Con eso dicho. Creo que tu mejor opción es intentar lanzar el 429 a HttpStatusCode y ver qué pasa. Si eso funciona, entonces puedes ahorrarte el dolor de cabeza.


0
2018-03-25 19:16