Я могу сделать приведенный вами пример простым изменением, заменив:
actionContext.HttpContext.Request.EnableRewind();
на:
actionContext.HttpContext.Request.Body.Position = 0;
После прочтения тела(от самого MVC), позиция потока должна быть сброшена в начало, прежде чем пытаться прочитать его снова.
В моем тестировании я обнаружил, что мне не нужен вызов EnableRewind
вообще , но в случае, если это необходимо в вашем случае, я ожидаю, что в вашем примере это будет называться слишком поздно .Если установка Position
на 0
, как я показал, не работает в одиночку, вам может понадобиться добавить пользовательское промежуточное ПО, которое настраивает перемотку:
app.Use(async (ctx, next) =>
{
ctx.Request.EnableRewind();
await next();
});
Это необходимо добавить до UseMvc
, но, как я уже сказал, я обнаружил, что в моем тестировании это было не нужно, но я ожидаю, что это не всегда так.