.netcore3.1 多次获取请求body报 System.ObjectDisposedException: Cannot access a disposed object. Object name: 'FileBufferingReadStream'.
时间:2020-07-07 11:30:13
收藏:0
阅读:118
开发中遇到 Cannot access a disposed object错误,大多数是多次读取请求Body流造成的,需要换一种获取请求Body流方法,不能使用StreamRreader方式,使用Body.CopyTo(ms)方法
-
- 在Startup配置中添加EnableBuffering
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.Use(next => context => { context.Request.EnableBuffering(); return next(context); });
-
- 在过滤器中,获取Post请求Body的Context使用下面方式获取
public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { context.HttpContext.Request.EnableBuffering(); context.HttpContext.Request.Body.Position = 0; string bodyStr = string.Empty; //using (var reader = new StreamReader(context.HttpContext.Request.Body, Encoding.UTF8)) //{ // var bodyRead = reader.ReadToEndAsync(); // bodyStr = bodyRead.Result; //把body赋值给bodyStr // needKey = JsonConvert.DeserializeAnonymousType
//(bodyRead.Result, new Dictionary<string, object>())[dependencySource].ToString(); //} using (var ms = new MemoryStream()) { context.HttpContext.Request.Body.CopyTo(ms); var b = ms.ToArray(); bodyStr = Encoding.UTF8.GetString(b); //把body赋值给bodyStr var dicObj= JsonConvert.DeserializeAnonymousType(bodyStr, new Dictionary<string, object>()); }
原文:https://www.cnblogs.com/personblog/p/13259732.html
评论(0)