2014-03-05 3 views
3

간단히 말해서 XML HTTP 게시 요청을 응용 프로그램 서버로 보내고 XML HTTP 형식으로 응답을 받고 있습니다.400 또는 500 HTTP XML 응답의 XML 본문 가져 오기

서버의 실제 응답을 시각적으로 XML 형식으로 볼 수있는 테스트 사이트가 있지만 C# 코드에서이 XML에 액세스 할 수 없습니다.

내 테스트 케이스의 응용 프로그램 서버에서 돌아 오는 XML은 다음과 같습니다

<Error><Message>StringErrorMessage</Message></Error> 

는 그러나, 나는의 창조를 위해 "StringErrorMessage"의 값을 검색 할 기본적인 XML에 접근 운이 없었을 자세한 오류보고.

... More code above, all wrapped in a try{}... 

_response = Serializer.DeserializeObject<T>(ObjectRequest.GetResponse().GetResponseStream()); 

     } 
     catch (System.Net.WebException exceptionParameter) 
     { 
      var response = (HttpWebResponse)exceptionParameter.Response; 
      string webExceptionStatus = exceptionParameter.Message; 
      _exception = exceptionParameter; 
      return false; 
     } 

나는 C# - Getting the response body from a 403 error

Get response body on 400 HTTP response in Android?

첫 번째 링크의 솔루션은 어떤 응답 객체의 속성의 일부로서 나에게 기본적인 XML에 대한 액세스 권한을 부여하지 않는 것을 상담했다. 나는 거기에 바이트 []에 있어야합니다 (응답, 또는 예외 개체)에 변환 할 수있는 문자열로 변환 할 수있는 char []로 변환 할 수있는 어딘가에 내 긍정적 인 오전 내 변환 할 수 있습니다. XML 본문이지만 찾을 수 없었습니다. 두 번째 링크의 솔루션은 응답 본문을 XML 형식으로 다시 가져와야하므로 오류가 아니기 때문에 응답 할 수있는 본문을 역 직렬화해야하므로 개체는 deserialize되어야합니다. 이 사물의 측면은 변할 수 없습니다.

모든 조언을 주시면 매우 감사하겠습니다. - Eli

편집 : 내 기본 코드가 오류가없는 상황에서 정상적으로 작동하는지 확인하고 XML을 비 직렬화로 처리하고 있습니다. 내 코드에서 HTTP 400 또는 HTTP 500 오류가 발생하면 catch 문에서 XML에 액세스하는 것이 문제가되는데, 이는 내 코드가 즉시 예외를 throw하기 때문입니다.

답변

2

HttpWebResponse 개체의 GetResponseStream 메서드를 사용하여 HTTP 메시지 (사용자의 경우 XML) 본문을 검색 할 수 있습니다. 이 스트림은 이후 그리고, 당신은 예를 들어 지금처럼 StreamReader로 읽을 수 있습니다, 당신이 무엇이든 그것을 할 수

HttpWebResponse myWebResponse; // Get this from whereever you want 

Stream responseStream = myWebResponse.GetResponseStream(); 

StreamReader reader = new StreamReader(responseStream); 
string niceStringForYou = reader.ReadToEnd(); 

... 그리고 그 시점에서에.

당신은 항상거야, 당신은 아마 스트림에서 직접 XML을 얻기 위해 XmlReader를 사용하여 다시 서비스에서 얻을 XML이 될 것 확신 경우 :

XmlReader foo = XmlReader.Create(responseStream); 

코멘트 편집 : HttpWebResponse 객체를 가지고 있다면 응답 스트림 (GetResponseStream())을 읽는 것이 좋습니다. 그리고 자신의 코드에서 지적한대로 (HttpWebResponse)exceptionParameter.Response을보고 HttpWebResponse를 얻을 수 있습니다.

+1

매력처럼 작동했습니다! 고마워요, Arve - 당신 같은 사람들이 S.O를 만듭니다. 그런 위대한 사이트. –

+0

이 작업을 끝내기 위해서 : 나는 슬프게도 XmlReader를 아직 만들지 못했지만 설명 된 첫 번째 방법이 잘 작동하고 있습니다.이 시점에서 응답이 언제 다시 올지 알 수 없기 때문에 다음과 같은 메시지가 표시 될 수 있습니다. XmlReader foo = XmlReader.Create (responseStream); 문자열 내용 = foo.GetAttribute ("Message"); 내용이 null = * (어쩌면 언젠가는이 수수께끼를 푸는 ... –