解决ASP.NET MVC的FileStreamResult无法正确返回数据问题

简介: 使用ASP.NET MVC 3 RC2 的时候发现,这样的代码在一些情况下总是无法返回正确的结果(理论上来说前几个版本也存在这种可能): MemoryStream ms = xxxx;//图片类型return File(ms, "image/jpeg");   跟踪了一下File的结果,确实已经有数据,但是无法在页面上返回(此时File重写方法返回的是FileSreamResult)。

使用ASP.NET MVC 3 RC2 的时候发现,这样的代码在一些情况下总是无法返回正确的结果(理论上来说前几个版本也存在这种可能):

MemoryStream ms  =  xxxx; // 图片类型
return  File(ms,  " image/jpeg " );

 


跟踪了一下File的结果,确实已经有数据,但是无法在页面上返回(此时File重写方法返回的是FileSreamResult)。

但如果把这个Stream先保存为文件,然后直接返回文件名是可以的: 

return  File(filename,  " image/jpeg " );

 

此时File重写方法返回的是FileContentResult。

经过比较发现,这两个方法其实都可以获取到正确的FileSreamResult或者FileContentResult,只不过MVC无法正确渲染FileSreamResult,于是walkaround一下:

MemoryStream ms  =  xxxx; // 图片类型
return  File(ms.ToArray(),  " image/jpeg " );

 

这样就把MemoryStream转成byte[]类型,返回类型为FileContentResult,可以正常输出。

 

QQ:498977166

http://szw.cnblogs.com/
研究、探讨.NET开发
转载请注明出处和作者,谢谢!

 

微信开发深度解析:微信公众号、小程序高效开发秘籍
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版

 

目录
相关文章
|
6天前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
10 0
|
6天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
23 0
|
6天前
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
6天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
24 3
|
6天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
34 3
|
6天前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
12 0
|
6天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
33 0
|
6天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
6 0
|
6天前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
123 5