2011-10-31 4 views
15

그래서 POST 메서드를 통해 XML을 수락하는 페이지가 있습니다. 여기에 코드의 작은 비트입니다 :입력 스트림 디코딩

if (Request.ContentType != "text/xml") 
     throw new HttpException(500, "Unexpected Content Type"); 

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); // added to view content of input stream 

XDocument xmlInput = XDocument.Load(stream); 

내가 오류를 얻고 있었다, 그래서 나는 모든 것이 제대로 전송되는 경우 바로보고, 문자열로 변환 스트림.

% 3C %의 3fxml + 버전 % 3 차원 % 271.0 % 27 + 인코딩 % 3 차원 %의 27UTF-8 % 27 % 3 층 % 3E % 0D %의의 0A

: 나는 내용 보았을 때,이처럼 보였다

그래서 내가 스트림을 해독해야 할 것 같아요. 유일한 문제는 스트림에서 HtmlDecode를 어떻게 사용할 수 있는지 알지 못하고 여전히 StreamReader 개체로 유지하는 것입니다.

이렇게 할 방법이 있습니까?

+0

XML이 단지 XML을 포함하기보다는 여분의 시간으로 인코딩 된 것처럼 보입니다. 무엇이 데이터를 게시하고 있으며 무엇을해야합니까? –

+0

HTML 인코딩이 아닌 URL 인코딩 문자열처럼 보입니다. 주요 질문 - 왜? xml을 게시하는 쪽을 제어합니까? –

+0

@invisible - 아니요, XML을 게시하는 측을 제어하지 않습니다. – Steven

답변

23

클라이언트가 콘텐츠를 URL 인코딩 된 XML로 보내고있는 것 같습니다. 따라서 다음과 같이 내용을 디코드해야합니다.

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); 
string xml = HttpUtility.UrlDecode(x); 

XDocument xmlInput = XDocument.LoadXml(xml); 

어쨌든이 문제는 아마도 클라이언트 측에있을 것입니다 ... 왜 이렇게 XML을 인코딩합니까?

+0

@Jcorretjer 내 답변에서 제안한 것은 OP의 유스 케이스에만 유용합니다. 임의의 파일 업로드에서 이것을 사용하는 것은 말이되지 않습니다. –

관련 문제