Leer el cuerpo de la solicitud dos veces

Estoy tratando de leer el cuerpo en un middleware para fines de autenticación, pero cuando la solicitud llega al controlador api, el objeto está vacío ya que el cuerpo ya ha sido leído. ¿Hay alguna forma de evitar esto? Estoy leyendo el cuerpo así en mi middleware.

var buffer = new byte[ Convert.ToInt32( context.Request.ContentLength ) ];
await context.Request.Body.ReadAsync( buffer, 0, buffer.Length );
var body = Encoding.UTF8.GetString( buffer );

Respuestas a la pregunta(2)

Su respuesta a la pregunta