くうと徒然なるままに

ゆるふわ を志向している なごやかです。

ASP.NET Core で Request.Body.Length を読もうとすると NotSupported Exception を吐くから解決してみた

ASP.NET Core を使っていて Body に入っているデータの長さを調べようとすることはよくあると思います。

そんなときに、 Request.bdy.Length を呼び出すと NotSupportedException を吐いてしまいました。

原因

Request.Body は Stream ですが、 Length などを呼び出す能力のない Stream 実装が入っています。(速度向上のためなのかな?)

そこで、一度別のストリームにコピーしてからなら使えるようになります。

コード

 [HttpPost]
        public async Task<ActionResult> Upload()
        {
            if (Request.Body == null)
                return NotFound();

            using (var memoryStream = new MemoryStream())
            {
                Request.Body.CopyTo(memoryStream);

                byte[] Bytes = new byte[memoryStream.Length];
                return Ok();
            }  
        }

参考URL

stackoverflow.com