多次读取Request.Body的问题
时间: 2019-04-20来源:博客园
前景提要
多次读取Request.Body的问题
0 [待解决问题] 最近在中间件中获取 Request.Body 遇到一个问题,代码如下
context.Request.EnableBuffering();
StreamReader sr = new StreamReader(context.Request.Body);
var body = sr.ReadToEnd();
context.Request.Body.Position = 0;
StreamReader 如果主动释放掉会导致context.Request.Body也释放掉,如果StreamReader 不主动释放掉会不会在请求结束的时候自动释放掉? 大酥梨 | 菜鸟二级 | 园豆: 202
提问于:2019-04-20 16:11 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(3) 0 1.StreamReader 是用于读取,不会有写入的问题,比如内存泄漏,这点不用担心。
2.关闭 StreamReader 的两个方法:
Close:关闭 System.IO.TextReader 并释放与该 TextReader 关联的所有系统资源。
Dispose:释放由 System.IO.TextReader 对象使用的所有资源。
如果你关闭 StreamReader,就会导致 context.Request.Body 被释放掉,但是如果你不关闭,有可能导致文件被持续占用,如果这个时候你需要删除就会出错。
3.从你的代码看,你不是操作文件,不释放没有问题。
4.不过为了更安全的编码,你可以使用 using: context.Request.EnableBuffering(); using (StreamReader sr = new StreamReader(context.Request.Body)) { sr.Dispose(); var body = sr.ReadToEnd(); context.Request.Body.Position = 0; } 三人乐乐 | 园豆:3245 (老鸟四级) | 2019-04-20 16:40 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 参考 ASP.NET Core 中读取 Request.Body 的正确姿势 dudu | 园豆:39012 (高人七级) | 2019-04-20 16:59 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 0 建议Request.Body就读取一次 慧☆星 | 园豆:5392 (大侠五级) | 2019-04-28 16:13 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行