우리의 응용 프로그램에서는 매우 간단한 로깅 훅 세트 (MVC 및 API 컨트롤러의 IExceptionFilters와 Application_Error()의 catch-all)가 있지만, 어떤 것도 트리거하지 않는 전체 카테고리의 오류가 있습니다. 예외가 WebAPI 자체 또는 내부적으로 사용되는 것으로부터 (예를 들어, 의존성 해결 자에 의해 생성되는 클래스의 형식 초기화 자 같이) 던져지면, 클라이언트에게 보내지는 500 응답 만받습니다.내부 웹 API 오류를 어떻게 처리해야합니까?
오류 세부 정보를 캡처하는 유일한 방법은 HttpConfiguration.IncludeErrorDetailPolicy를 사용하여 오류 세부 정보를 내보내는 응용 프로그램을 구성하는 것입니다. 그러나 오류 세부 정보를 전 세계에 전달하는 것은 나쁜 습관입니다. d를 완전히 해제하거나 조건부로 설정하는 것이 좋습니다 (예 : local-only.). 그러나 이것은 응용 프로그램이 실행중인 서버로 원격 작업을하고 응답을 검사 할 수있는 도구를 사용하여 API를 로컬로 호출하는 것을 의미합니다 (IE 또는 Chrome과 같은)를 사용하여 진행 상황을 파악할 수 있습니다.
비슷한 질문 (here)에서 또 다른 질문을 보았습니다. 응답을 조사하기 위해 DelegatingHandler를 사용하여 제시된 해결책이 우리의 요구를 충족시키지 못합니다. 실제로 연결할 수있는 이벤트가 없는지, 확장 점을 사용할 수 있습니까? 아니면 실제 예외가 발생했을 때이를 캡처 할 수 있습니까?
(제쳐두고, IncludeErrorDetailPolicy를 Always로 변경하고 다른 스레드에서 제공되는 솔루션을 사용하여 MessageHandler의 오류 세부 정보를 캡처하고 로그에 기록한 다음이를 수동으로 스크럽하여 클라이언트,하지만 그것은 심한 해킹 것입니다.)
생각? :/
왜 MessageHandler 접근 방식이 효과가 없습니까? –
필자는 그것을 오해하고 있을지 모르지만, 필자가 읽는 방법부터, 로그 할 수있는 예외 객체를 얻는 유일한 방법은 내 질문 끝에 언급 된 해킹을 따르는 것입니다. 모든 응답에서 오류 세부 정보를 포함 할 수있게하는 것입니다 그런 다음 해당 오류 세부 정보를 구문 분석하여 원래 throw 된 예외를 재구성하려고 시도한 다음 클라이언트에서 해당 세부 정보를 수동으로 스크럽하여 클라이언트에 보냅니다. .. 그리고 그게 효과가있는 동안, 그것은 조잡하고, 부서지기 쉽고, 진단 정보를 잃어 버리거나 의도하지 않게 그 정보를 고객에게 유출하는 경향이 있습니다. –
진단 정보를 보존하고 클라이언트에 정보 유출을 방지 하시겠습니까? 어떤 종류의 답장을 보내시겠습니까? 왜 디폴트가 당신을 위해 일하지 않습니까? 디버깅을 위해 로컬 시스템에 대한 전체 진단 정보를 얻을 수 있으며 원격 클라이언트로 정보가 유출되지 않습니다. –