HTTPリクエストをバイト配列に読み込む 質問する

HTTPリクエストをバイト配列に読み込む 質問する

私は、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);
    }
}

おすすめ記事