某些第三方通过HTTP Post将数据发布到我们的网页。我想为HTTP帖子设置一个限制为1 Kb,如果它高于1 Kb我需要拒绝HTTP帖子。我不想读取整个请求流来查找内容长度。无论如何我可以在不读取整个请求流的情况下进行验证吗?
答案 0 :(得分:2)
取决于内容长度是否在标题中。如果是,您只需抓取(例如HttpRequest.ContentLength
)。但是,他们不必指定。
否则,你可以读取第一个1K和1个额外字节:
byte[] data = new byte[1025];
int length = 0;
using (var stream = request.GetBufferlessInputSream())
{
while (length < validData.Length)
{
int bytesRead = stream.Read(data, length, data.Length - length);
if (bytesRead == 0)
{
break;
}
length += bytesRead;
}
}
if (length > 1024)
{
// Client sent more than 1024 bytes of data!
}
// Otherwise, use the first "length" bytes of data
请注意,data
的大小为1025,因此我们尝试读取的字节比我们允许客户端发送的字节多一个。
如果客户端发送的数量超过1K,我们仍会读取第一个1K - 但我们只会读取一个不必要的字节。我们不会永远读书。