为什么Request.InputStream包含额外的字节?

时间:2015-06-01 16:52:26

标签: c# .net vb.net ashx

我将字节数组上传到ASHX处理程序

byte[] serializedRequest = SerializeRequest();

var uri = new Uri(_server.ActionUrl);
using (WebClient client = new WebClient())
{
    client.UploadData(uri, serializedRequest);
}

处理程序

收到了哪些内容
Dim str As Stream = context.Request.InputStream
Dim transformation(str.Length - 1) As Byte ' here I have extra "0"-byte
str.Position = 0
str.Read(transformation, 0, transformation.Length)

如您所见,我必须执行str.Length - 1来声明字节数组。而这正在发展中。我甚至不知道它在部署时会如何表现。这个字节来自哪里?这是一种可靠的方法,还是应该在流的开头添加一些字节来告诉从Request.InputStream读取多少字节?

1 个答案:

答案 0 :(得分:2)

Dim x(y) as Byte实际上意味着"数组的上界y(长度= y + 1)" (Arrays in VB.NET)。

Dim transformation(str.Length) As Byte实际上声明了比您需要的更大的数组,因此str.Length - 1语句是正确的。

实际上没有0值字节,因为Stream.Read()不需要将流读取到结尾(检查方法返回值)并留下带有默认值(0)的额外字节。