2012-06-21 3 views
2

.NET 4.0을 사용 중이며 Request.InputStream을 문자열로 가져 오려고합니다.VB.NET InputStream이 비어 있습니다.

Dim req As HttpRequest = HttpContext.Current.Request 
' Log input stream length 
util.SystemError("inputstream length = " + req.InputStream.Length.ToString, "MBOL") 
req.InputStream.Position = 0 
Dim encodedString As String = New StreamReader(req.InputStream).ReadToEnd() 

이것은 inputstream의 길이는 1671입니다 저를 보여 주지만, 내가 얻을 encodedString이 비어 : 나는 명백한을 시도했습니다. try/catch를 추가했지만 오류가없는 것 같습니다. 단지 빈 문자열 만 반환합니다.

이것이 잘못 될 수있는 아이디어가 있습니까? 어떤 도움을 주셔서 감사드립니다.

답변

1

입력 스트림을 반드시 여러 번 읽을 수는 없습니다. 번으로 읽기 전용입니다 (특정 구현에서는이 제한이 완화 될 수 있지만).

결과적으로 실제로 스트림을 읽으므로 길이를 사용할 수 없습니다. 위치를 0으로 재설정한다고해서 작동이 보장되는 것은 아닙니다 (볼 수 있듯이).

의 길이를 가져 오려면을 읽기 전에 Content-Length 헤더 필드를 사용해야합니다. 서버가이를 제공 할 필요는 없다는 점에 유의하십시오. 콘텐츠 길이를 얻는 데 100 % 신뢰할 수있는 유일한 방법은 콘텐츠를 읽는 것입니다. 다음에 길이를 가져옵니다.

Stream 기본 클래스에는 Length 속성이 없어야한다고 주장 할 수 있습니다. 약한 디자인입니다.

+0

감사합니다. 길이를 삭제했지만 여전히 동일한 문제가 발생합니다. 거기에 길이가 있음을 증명할 수있는 길이 코드가있었습니다. 스트림에 성공적으로 생성 된 문자열을 막는 잘못된 문자가 어딘가에 있는지 궁금하네요? – singhster

+0

이것은 실제로 그것을 고쳤습니다! 초기 버그가 있었고 길이 코드를 추가하여 거기에 뭔가 있다는 것을 확인해주었습니다. 제거하면 실제로 코드가 수정되었습니다. - 대단히 감사합니다. – singhster

관련 문제