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,但我得到的编码字符串为空。我在它周围添加了一个 try / catch ,但它似乎没有出错,它只是返回一个空字符串。

有什么想法可能会出错吗?提前感谢您对此提供的任何帮助。

4

1 回答 1

1

一个输入流不一定要被多次读取,它是通过契约读取一次(尽管特定的实现可能会放宽这个限制)。

因此,您无法获取它的长度,因为它实际上读取了流。即使将其位置重置为 0 也不能保证有效(如您所见,也不会)。

如果要在阅读获取内容的长度,则需要依赖Content-Lengthheader 字段。请注意,服务器不必提供此信息。获取内容长度的唯一 100% 可靠的方法是读取内容,然后获取其长度。

可以说Stream基类根本不应该有Length属性。这是一个薄弱的设计。

于 2012-06-21T12:04:55.727 回答