一些第三方通过 HTTP Post 将数据发布到我们的网页。我想为 HTTP 帖子设置一个限制,比如 1 Kb,如果它高于 1 Kb,我需要拒绝 HTTP 帖子。我不想阅读整个请求流来找出内容长度。无论如何我可以在不阅读整个请求流的情况下进行验证吗?
问问题
491 次
1 回答
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——但我们只会读取一个不必要的字节。我们不会一直读下去。
于 2013-05-20T06:07:41.673 回答