1

一部の第三者が、HTTP Post を介して当社の Web ページにデータを投稿しています。HTTP 投稿に 1 Kb という制限を設定したいのですが、1 Kb を超える場合は HTTP 投稿を拒否する必要があります。コンテンツの長さを調べるためにリクエスト ストリーム全体を読みたくありません。リクエストストリーム全体を読み取らずに検証できる方法はありますか?

4

1 に答える 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 であるため、クライアントに送信を許可するよりも 1 バイト多く読み取ろうとすることに注意してください。

クライアントが 1K 以上を送信した場合でも、最初の 1K を読み取りますが、不要な 1 バイトのみを読み取ります。私たちは永遠に読み続けることはありません。

于 2013-05-20T06:07:41.673 に答える