一部の第三者が、HTTP Post を介して当社の Web ページにデータを投稿しています。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 であるため、クライアントに送信を許可するよりも 1 バイト多く読み取ろうとすることに注意してください。
クライアントが 1K 以上を送信した場合でも、最初の 1K を読み取りますが、不要な 1 バイトのみを読み取ります。私たちは永遠に読み続けることはありません。
于 2013-05-20T06:07:41.673 に答える