如何在c#中不解析请求流的情况下拒绝基于内容长度的HTTP post
本文关键字:拒绝 情况下 于内容 post HTTP 请求 | 更新日期: 2023-09-27 18:14:26
一些第三方通过HTTP Post向我们的网页发布数据。我想为HTTP帖子设置一个限制,比如1 Kb,如果超过1 Kb,我需要拒绝HTTP帖子。我不想读取整个请求流来找出内容长度。我是否可以在不读取整个请求流的情况下验证?
这取决于内容长度是否在标题中。如果是,你可以直接获取它(例如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的数据,但是我们只会读取一个不必要的字节。我们不会一直读下去的。