У меня есть некоторое ASP. NET Базовое промежуточное программное обеспечение (AuthorizationHandler
), которому необходим доступ к телу запроса для проверки прав доступа. Я использую новые конвейерные API для доступа к телу запроса. Код выглядит следующим образом:
PipeReader bodyReader = httpContext.Request.BodyReader;
ReadResult readResult = await bodyReader.ReadAsync();
ReadOnlySequence<byte> readResultBuffer = readResult.Buffer;
var utf8JsonReader = new Utf8JsonReader(bytes);
while (utf8JsonReader.Read()) { ... }
Когда этот код выполняется, основной поток считывается. Контроллер, который я хочу вызвать, выдает ошибку проверки, потому что он не видит тело запроса, потому что оно уже прочитано.
Так как мне сбросить PipeReader
, чтобы тело запроса могло быть повторно читать?
Я знаю, что когда вы не используете BodyReader
, а Body
, вы можете использовать EnableBuffering
для включения запрос перечитывает. Однако при использовании конвейеров это больше не работает (или я делаю что-то еще неправильно).