[c#] 사용자 지정 HTTP 상태 코드를 만들 수 있습니까?

REST 및 WCF 서비스가 있고 작업에 따라 사용자 지정 상태 코드를 보내고 싶습니다.

일부 유효성 검사가 실패하면 HTTP 444를 보내고 인증이 실패하면 HTTP 455를 보내고 싶습니다.

문제는 SOAP 및 REST 웹 서비스 모두에 대해 어떻게 유효성을 검사하는지입니다.

WCF 서비스 (SOAP 사용)에서 HTTP 400/500을 보낼 때 클라이언트에서 상태 코드를 표시하는 예외가 발생하기 때문에 클라이언트에서 오류 코드가 어떻게 작동합니까?

이제 새 사용자 지정 상태 코드를 보내면 클라이언트가이를 어떻게 처리합니까?



답변

예, 클래스를 존중하는 한, 즉 성공의 경우 2xx, 클라이언트 오류의 경우 4xx 등입니다. 따라서 자신의 애플리케이션 오류 조건에 대해 사용자 정의 4XX 오류 코드 (할당되지 않은 오류 코드)를 반환 할 수 있습니다.

[RFC 2616] [1]에서 인용하려면 :

“HTTP 상태 코드는 확장 가능합니다. HTTP 애플리케이션은 등록 된 모든 상태 코드의 의미를 이해할 필요는 없지만 이러한 이해가 분명히 바람직합니다. 그러나 애플리케이션은 첫 번째 숫자로 표시된 상태 코드의 클래스를 이해하고 처리해야합니다. 인식되지 않은 응답은 캐시되지 않아야한다는 점을 제외하고는 해당 클래스의 x00 상태 코드와 동일한 것으로 인식되지 않는 모든 응답입니다. 예를 들어 클라이언트가 인식 할 수없는 상태 코드 431을 수신 한 경우 요청에 문제가 있고 응답을 400 상태 코드를받은 것처럼 처리합니다. “

수업’

  • 1xx : 정보 용-요청 접수 됨, 프로세스 계속

  • 2xx : 성공-작업이 성공적으로 수신, 이해 및 수락되었습니다.

  • 3xx : 리디렉션-요청을 완료하려면 추가 조치를 취해야합니다.

  • 4xx : 클라이언트 오류-요청에 잘못된 구문이 포함되어 있거나 수행 할 수 없습니다.

  • 5xx : 서버 오류-서버가 명백하게 유효한 요청 [1]을 수행하지 못했습니다.

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


답변

예제에서 수행하려는 작업에 적용 가능한 코드가 이미 존재 하는 경우 자체 HTTP 상태 코드를 작성하지 않는 것이 좋습니다 .

  • 처리 할 수없는 오류 : 상태 422
  • 인증 실패 : 상태 403

에서 https://tools.ietf.org/html/rfc4918#section-11.2 :

422 [Unprocessable Entity] 상태 코드는 서버가 요청 엔티티의 컨텐츠 유형을 이해하고 (따라서 415 [Unsupported Media Type] 상태 코드가 부적절 함) 요청 엔티티의 구문이 정확함 (따라서 400 [Bad Request ] 상태 코드가 부적절 함) 포함 된 지침을 처리 할 수 ​​없습니다. 예를 들어,이 오류 조건은 XML 요청 본문에 올바른 형식 (즉, 구문 적으로 올바른)이 포함되어 있지만 의미 상 잘못된 XML 명령이 포함 된 경우 발생할 수 있습니다.

“처리 할 수 ​​없음”은 유효성 검사 오류 때문일 수 있습니다.


답변

예, 사용자 지정 오류 코드를 추가 할 수 있습니다. 가능하다면 이미 존재하는 코드를 사용하고 새로운 코드를 선언하는 경우 충돌을 피하도록주의하십시오.

일부 프록시는 알 수없는 코드를 필터링한다는 점을 알고 있어야합니다 . 5XX를 500으로, 4XX를 404로 매핑 한 프록시 뒤에있는 사용자와 문제가있었습니다. 이로 인해 상태 코드 확인이 실패하는 곳을 ajax 호출이 발생했습니다.


답변

일부 응용 프로그램은 600-799 범위의 사용자 지정 응답 코드를 추가합니다. 여기에서 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).

이것이 좋은 관행인지 나는 감히 말할 수는 없지만 적어도 흥미로운 참고 자료입니다.


답변

다음은 사용 가능한 / 사용할 수없는 모든 HTTP코드 의 전체 목록입니다 .

https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml

예를 들어, 다음 화살표는 가족에서 사용할 수 있습니다 (할당되지 않았기 때문에) 4XX.

여기에 이미지 설명 입력

누군가에게 도움이되기를 바랍니다.

감사


답변

아니요, rfc 문서 요구 사항 코드 만 사용할 수 있습니다. 자세한 내용은 RFC1945를 참조하십시오.


답변