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();
}
}