首页 新闻 会员 周边

多次读取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
< >
分享
所有回答(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;
}
三人乐乐 | 园豆:4819 (老鸟四级) | 2019-04-20 16:40
0
dudu | 园豆:31003 (高人七级) | 2019-04-20 16:59
0

建议Request.Body就读取一次

慧☆星 | 园豆:5640 (大侠五级) | 2019-04-28 16:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册