tabla respuesta maneja injector estado error códigos código como codigos 4xx c# asp.net wcf http wcf-rest

c# - respuesta - ¿Podemos crear códigos de estado HTTP personalizados?



http error 431 (5)

Tengo un servicio REST y WCF y deseo enviar un código de estado personalizado basado en la operación.

Ejemplo cuando falla alguna validación, entonces deseo enviar HTTP 444 y cuando la autorización falla, quiero enviar HTTP 455

La pregunta es cómo la validamos para los servicios web SOAP y REST.

En el cliente, ¿cómo actúa el código de error porque cuando envía un HTTP 400/500 desde un Servicio WCF (utilizando SOAP) se produce una excepción en el cliente que muestra el código de estado.

Ahora si envío un nuevo código de estado personalizado, ¿cómo lo maneja el cliente?


Algunas aplicaciones agregan sus códigos de respuesta personalizados en el rango 600-799. Compruebe por ejemplo la lista de códigos de respuesta de KeyNote aquí

Códigos de error definidos de Keynote (600-799)

600: CONNECTION ERROR - This indicates a general connection error 601: INCOMPLETE ERROR - This indicates sever sends an incomplete page/object (as indicated by Content-Length header) 602: UNEXPECTED CLOSE ERROR - This indicates socket connection has been closed unexpectedly 603: REFUSED ERROR - This indicates a request to connect to the server is refused 604: TIMEOUT ERROR - This indicates there is no activity in socket connection in 3 minutes 605: REDIRECT ERROR - This indicates an error in redirect HTTP header 606: SSL ERROR - This indicates a general error in SSL 607: HEADER ERROR - This indicates a malformed HTTP header 608: EMPTY RESPONSE ERROR - This indicates server doesn''t send any response after a request is sent 609: UNKNOWN HOST ERROR - This indicates socket receives an unknown host error from DNS 610: NO ROUTE TO HOST ERROR - This indicates a no route to host error was received while attempting to open a socket 611: SOCKET ERROR - This indicates a general socket error 612: FRAME LOOP ERROR - This indicates a page has a frame loop (frame A includes Frame B that includes Frame A) 613: REDIRECT LOOP ERROR - This indicates a page has a redirect loop (page A redirects to page B that redirects to page A) 614: CONNECTION RESET ERROR - This indicates socket receive a reset signal from the server 615: SOCKET PROTOCOL ERROR - This indicates an error in socket protocol 616: SOCKET BIND ERROR - This indicates an error in binding the socket 617: CONNECTION ERROR - This indicates a general socket connection error 618: CHUNK ERROR - This indicates an error in chunked encoding 619: SSL TIMEOUT - This indicates a timeout during SSL handshake (2 minutes) 620: SSL END OF INPUT - This indicates an end-of-file is received during SSL handshake 621: SSL HANDSHAKE ERROR - This indicates a general error during SSL handshake 622: SSL CERTIFICATE ERROR - This indicates an error in SSL certificate verification 623: SSL AUTHENTICATION ERROR - This indicates an authentication error during SSL handshake 624: SSL BAD MAC ERROR - This indicates a bad MAC during SSL handshake 625: SSL CIPHER ERROR - This indicates a cipher error during SSL handshake 701: ERROR TEXT FOUND - This code is returned if any error text (such as, "Service Unavailable") are found in the main page (frame HTML contents included). Note that the error text must be defined in advance of the test. Error text means if the text is found, this session should be considered a failure. 702: REQUIRED TEXT NOT FOUND - This code is returned If not all required texts are found in the main page. Note that required text must be defined in advance of the test. Required text means if the text is not found, this session should be considered a failure. 703: HTML BODY EMPTY - This code is returned if the HTML body of the page is empty (only if error text or required text has been defined).

Si esto es una buena práctica, no me atrevería a decir, pero al menos es una referencia interesante.


No, solo puedes usar el código de requisitos de documentación de rfc, ver detalles en RFC1945


Recomiendo no crear sus propios códigos de estado HTTP, cuando ya existan códigos aplicables para las cosas que desea hacer en su ejemplo.

  • Fallo de validación: estado 422
  • Error de autorización: estado 403

Sí, puedes agregar códigos de error personalizados. Si es posible, use códigos que ya existen, y si está declarando nuevos, tenga cuidado para evitar colisiones.

Sin embargo, debe tener en cuenta que algunos proxies filtran códigos desconocidos . Tuve problemas con los usuarios que estaban detrás de los proxies que mapearon 5XX a 500, y 4XX a 404. Esto hizo que mis llamadas ajax fueran falsas al verificar el código de estado.


Sí, siempre y cuando respete la clase, es decir, 2xx para el éxito, 4xx para el error del cliente, etc. Por lo tanto, puede devolver códigos de error 4XX personalizados (preferiblemente aquellos que no están asignados) para las condiciones de error de su propia aplicación.

Para citar de [RFC 2616] [1]:

"Los códigos de estado HTTP son extensibles. Las aplicaciones HTTP no son necesarias para entender el significado de todos los códigos de estado registrados, aunque tal comprensión es obviamente deseable. Sin embargo, las aplicaciones DEBEN comprender la clase de cualquier código de estado, como lo indica el primer dígito, y tratar cualquier respuesta no reconocida como equivalente al código de estado x00 de esa clase, con la excepción de que una respuesta no reconocida NO DEBE almacenarse en caché. Por ejemplo, si el cliente recibe un código de estado no reconocido de 431, puede suponerse que hubo algo está mal con su solicitud y trata la respuesta como si hubiera recibido un código de estado de 400 ".

Clase''

  • 1xx: Informativo - Solicitud recibida, proceso continuo

  • 2xx: éxito: la acción fue recibida, entendida y aceptada con éxito

  • 3xx: Redirección: se deben tomar medidas adicionales para completar la solicitud

  • 4xx: Error de cliente: la solicitud contiene mala sintaxis o no se puede cumplir

  • 5xx: Error del servidor: el servidor no cumplió con una solicitud aparentemente válida [1]:

http://tools.ietf.org/html/rfc2616#section-6.1.1