私は、HTTP ポスト リクエストを受け取り、それをバイト配列に読み込んでさらに処理する必要がある Web ページを開発しています。これをどうやって行うのか、どうすればよいのか、行き詰まっています。実現するための最善の方法がわかりません。これがこれまでの私のコードです。
public override void ProcessRequest(HttpContext curContext)
{
if (curContext != null)
{
int totalBytes = curContext.Request.TotalBytes;
string encoding = curContext.Request.ContentEncoding.ToString();
int reqLength = curContext.Request.ContentLength;
long inputLength = curContext.Request.InputStream.Length;
Stream str = curContext.Request.InputStream;
}
}
リクエストの長さと合計バイト数が 128 であることを確認しています。Stream オブジェクトを使用して byte[] 形式に変換すればよいのでしょうか? 正しい方向に進んでいますか? どのように進めればよいかわかりません。アドバイスをいただければ幸いです。HTTP リクエスト全体を byte[] フィールドに取得する必要があります。
ありがとう!
ベストアンサー1
最も簡単な方法は、それを - にコピーし、必要に応じてMemoryStream
呼び出すことです。ToArray
.NET 4 を使用している場合、これは非常に簡単です。
MemoryStream ms = new MemoryStream();
curContext.Request.InputStream.CopyTo(ms);
// If you need it...
byte[] data = ms.ToArray();
編集: .NET 4 を使用していない場合は、CopyTo の独自の実装を作成できます。拡張メソッドとして機能するバージョンを次に示します。
public static void CopyTo(this Stream source, Stream destination)
{
// TODO: Argument validation
byte[] buffer = new byte[16384]; // For example...
int bytesRead;
while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
destination.Write(buffer, 0, bytesRead);
}
}