2011-05-06 3 views
7

.NET의 HttpWebRequest/HttpWebResponse 유형 위에 유창한 REST 클라이언트 인터페이스를 작성하는 중입니다. 지금까지는 그렇게 좋았지 만 ... 보안 토큰 협상, 토큰 새로 고침 등을 자동으로 처리 할 수있는 플러 거블 보안 프레임 워크를 개발하려고합니다. HttpWebRequest/Response 작업의 성격 상 문제가 생겼습니다. 400 시리즈 또는 500 시리즈 HTTP 상태 코드가 발생할 때 단순히 .StatusCode.StatusDescription 속성을 설정하고 원하는 방식으로 처리하도록 허용하는 대신 WebException을 던집니다. 일반적으로이 문제는 문제가되지 않지만 OAuth 2.0의 파생어를 인증하는 방식으로 예외없이 400 계열의 특정 오류를 처리해야합니다.400/500 상태 코드에서 HttpWebRequest 동작을 변경하는 방법이 있습니까?

HttpWebRequest/Response를 다시 구성하여 WebException을 던지지 않고 자체 오류 처리를 결정할 수있는 방법이 있습니까? 이전 Http1.0 서버를 사용하여 Expect-100-Continue를 처리하는 몇 가지 방법이 있다는 것을 알고 있습니다 ... WebExceptions을 사용하지 않도록 비슷한 비슷한 방법이 있다면 궁금합니다.

(아, 그리고 저항 할 수 없습니다 ... 리플렉터 6의 라이센스가 부여 된 무료 버전을 불법적으로 제거한 RedGate의 큰 친구들에게 큰 우정을 전합니다. 코드를 스누핑 할 수 있다면 내 모습을 그려보세요 ...하지만 슬프게도 ... 반사경은 슬프게도자가 분해를 통해 스스로를 소비했기 때문에 슬프게도 실현 불가능한 옵션입니다.; P)

+1

반사경이가는 한, ILSpy를 사용해보십시오. – BKewl

답변

8

비슷한 문제가 있었고 해결되었습니다. 다음 도우미 방법을 사용하십시오 :

public static HttpWebResponse MakeRequest(HttpWebRequest request) 
{ 
    try 
    { 
     return (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException we) 
    { 
     if (we.Response != null) 
     { 
      return (HttpWebResponse)we.Response; 
     } 
     throw; 
    } 
} 
+1

답해 주셔서 감사합니다. 나는 거의 같은 일을 거의 끝내었다. Microsoft가 오류 유형 상태 코드가 발생했을 때 사용자가 예외를 잡도록 선택한 이유는 확실하지 않지만 실제로 상황을 어렵게 만듭니다. 좋은 작은 도우미가 HttpWebRequest에서 확장 메소드를 만들려고해도 ... 사용하기가 더 쉽습니다. ;) – jrista