You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:03