ASP.NET通过MemoryStream下载序列化MailMessage附件时返回空数据问题
错误原因
反序列化生成System.Net.Mail.Attachment对象的过程中,序列化工具已经完整读取过一次附件的ContentStream流,此时流的当前位置(Position属性)处于流的末尾,你直接调用Read方法读取时,无法读取到任何字节,所以返回的字节数组长度始终为0。
修复方案
在调用ReadFully方法读取流内容之前,手动将流的位置重置到起始位置即可,仅需添加一行代码:
_attachment.ContentStream.Position = 0;
修改后的对应代码段如下:
Attachment _attachment = _message.Attachments[_selected]; // 重置附件内容流的指针到起始位置 _attachment.ContentStream.Position = 0; byte[] _data = ReadFully(_attachment.ContentStream);
补充说明
你之前在其他场景使用同一段代码没有问题,是因为其他场景下你获取到的Attachment对象的ContentStream是刚初始化的,流位置默认在起始位置,不需要额外重置。而反序列化场景下多了一步序列化工具读流构建对象的操作,才会触发这个问题。
内容的提问来源于stack exchange,提问作者weirdgyn
相关产品推荐
相关产品推荐

