C#接收XML文件 ASP.NET如何处理文件上传-XML/RSS教程

ASP.NET Core 中用 IFormFile 接收 XML 文件需直接读取流并用 XDocument.Load 或 XmlReader 安全解析,禁用 DTD 和外部实体以防 XXE,校验 ContentType 并处理 BOM 与编码声明。

ASP.NET Core 中用 IFormFile 接收 XML 文件上传

XML 文件本质是文本,只要前端按普通文件上传,后端就能拿到原始字节流。关键不是“XML 特殊”,而是别把它当二进制乱解析——尤其别用 StreamReader 默认编码读取,容易因 BOM 或声明里的 encoding 属性出错。

实操建议:

  • 控制器方法参数直接接收 IFormFile,不要依赖模型绑定自动转成字符串或对象
  • 用 file.OpenReadStream() 获取流,再交给 XDocument.Load() 或 XmlSerializer 解析,它们会自动识别编码声明(如 )
  • 若需先保存再处理,用 file.CopyToAsync() 写入临时文件,路径别硬写 C:\temp,改用 Path.GetTempFileName()
  • 务必校验 file.ContentType 是否为 text/xml 或 application/xml,但不能仅靠它拦截——MIME 类型可被伪造

ASP.NET Framework(.NET 4.x)中用 Request.Files 读取 XML

老版本没有 IFormFile,得从 Request.Files[0] 拿 HttpPostedFileBase。它暴露的是原始流,但注意:如果启用了 requestValidationMode="4.5",含尖括号的 XML 可能触发 HttpRequestValidationException。

实操建议:

  • 在对应 Action 上加 [ValidateInput(false)],否则带 的 XML 直接 500
  • 用 file.InputStream 构造 XmlReader.Create(),别用 file.FileName 去磁盘找文件——它只是客户端传来的名字,不保证存在
  • 若 XML 很大(>1MB),避免一次性 ReadToEnd() 转字符串,改用流式解析(XmlReader.Read() 循环)防内存溢出
  • file.ContentLength 是字节数,不是字符数;检查是否为 0 再读流,否则 XmlDocument.Load() 会抛 XmlException

解析时遇到 “Data at the root level is invalid” 错误

这是 XmlDocument.Load() 或 XDocument.Load() 最常见的报错,90% 是因为流位置不在开头,或内容被提前读过一次。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » C#接收XML文件 ASP.NET如何处理文件上传-XML/RSS教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4003878+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4003879+
  • 本周更新: 0+
  • 最后更新: 2026-03-16