如何在不解析C#中的请求流的情况下,根据内容长度拒绝和HTTP POST?

如何在不解析C#中的请求流的情况下,根据内容长度拒绝和HTTP POST?,c#,http,post,http-headers,httpwebrequest,C#,Http,Post,Http Headers,Httpwebrequest,一些第三方正在通过HTTP Post向我们的网页发布数据。我想为HTTP帖子设置一个限制,比如1KB,如果超过1KB,我需要拒绝HTTP帖子。我不想通过阅读整个请求流来了解内容长度。我是否可以在不读取整个请求流的情况下进行验证?这取决于内容长度是否在标题中。如果是的话,你可以去拿(例如)。但是,他们不必具体说明这一点 否则,您可以只读取前1K和1个额外字节: byte[] data = new byte[1025]; int length = 0; using (var stream =

一些第三方正在通过HTTP Post向我们的网页发布数据。我想为HTTP帖子设置一个限制,比如1KB,如果超过1KB,我需要拒绝HTTP帖子。我不想通过阅读整个请求流来了解内容长度。我是否可以在不读取整个请求流的情况下进行验证?

这取决于内容长度是否在标题中。如果是的话,你可以去拿(例如)。但是,他们不必具体说明这一点

否则,您可以只读取前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
byte[]data=新字节[1025];
整数长度=0;
使用(var stream=request.GetBufferlessInputSream())
{
while(长度<有效数据长度)
{
int bytesRead=stream.Read(数据,长度,数据.length-length);
如果(字节读==0)
{
打破
}
长度+=字节读取;
}
}
如果(长度>1024)
{
//客户端发送的数据超过1024字节!
}
//否则,请使用数据的第一个“长度”字节
请注意,
data
的大小为1025,因此我们尝试读取比允许客户端发送的多一个字节

如果客户端发送的数据超过1K,我们仍将读取前1K,但只读取一个不必要的字节。我们不会永远读下去