Ron*_*erg 6 c# io asp.net-core asp.net-core-3.0 asp.net-core-3.1
我有一些 ASP.NET Core 中间件(an 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()) { ... }
Run Code Online (Sandbox Code Playgroud)
当此代码运行时,将读取主体流。我想要调用的控制器会抛出验证错误,因为它没有看到请求正文,因为它已被读取。
那么如何重置PipeReader
以便可以重新读取请求正文呢?
我知道当您不使用BodyReader
but时Body
,您可以使用EnableBuffering
来启用请求重新读取。但是,当使用管道时,这不再有效(或者我做错了其他事情)。
我一直致力于在控制器的OnActionExecuting
方法中读取和重置请求主体。这对我有用:
httpContext.Request.Body.Position = 0;
Run Code Online (Sandbox Code Playgroud)
也许这也适用于管道?
归档时间: |
|
查看次数: |
3000 次 |
最近记录: |