2

.NET 4.0を使用していて、Request.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()

これは、入力ストリームの長さが1671であることを示していますが、取得したencodedStringは空です。その周りにtry/catchを追加しましたが、エラーではないようです。空の文字列を返すだけです。

これがうまくいかない可能性のあるアイデアはありますか?これについての支援を事前に感謝します。

4

1 に答える 1

1

入力ストリームは、必ずしも複数回読み取ることができるとは限りません。コントラクトの1回の読み取りによるものです(ただし、特定の実装ではこの制限が緩和される場合があります)。

結果として、実際にストリームを読み取るため、その長さを取得することはできません。その位置を0にリセットしても、機能することが保証されていません(そして、ご覧のとおり、機能しません)。

コンテンツを読む前にコンテンツの長さを取得したい場合は、Content-Lengthヘッダーフィールドに依存する必要があります。サーバーがこれを提供する必要がないことに注意してください。コンテンツの長さを取得する唯一の100%信頼できる方法は、コンテンツを読み取ってからその長さ取得することです。

基本クラスにはプロパティがまったくStreamないはずだと主張することができます。Length弱いデザインです。

于 2012-06-21T12:04:55.727 に答える