asp.net-mvc – 从Action写入输出流
发布时间:2020-12-16 00:41:46 所属栏目:asp.Net 来源:网络整理
导读:由于某些奇怪的原因,我想将HTML直接写入控制器动作的响应流。 (我明白MVC的分离,但这是一个特例) 我可以直接写入HttpResponse流吗?在那种情况下,控制器动作应该返回哪个IView对象?我可以返回’null’吗? 解决方法 我使用从FileResult派生的类来实现这
由于某些奇怪的原因,我想将HTML直接写入控制器动作的响应流。
(我明白MVC的分离,但这是一个特例) 我可以直接写入HttpResponse流吗?在那种情况下,控制器动作应该返回哪个IView对象?我可以返回’null’吗? 解决方法
我使用从FileResult派生的类来实现这个使用正常的MVC模式:
/// <summary> /// MVC action result that generates the file content using a delegate that writes the content directly to the output stream. /// </summary> public class FileGeneratingResult : FileResult { /// <summary> /// The delegate that will generate the file content. /// </summary> private readonly Action<System.IO.Stream> content; private readonly bool bufferOutput; /// <summary> /// Initializes a new instance of the <see cref="FileGeneratingResult" /> class. /// </summary> /// <param name="fileName">Name of the file.</param> /// <param name="contentType">Type of the content.</param> /// <param name="content">Delegate with Stream parameter. This is the stream to which content should be written.</param> /// <param name="bufferOutput">use output buffering. Set to false for large files to prevent OutOfMemoryException.</param> public FileGeneratingResult(string fileName,string contentType,Action<System.IO.Stream> content,bool bufferOutput=true) : base(contentType) { if (content == null) throw new ArgumentNullException("content"); this.content = content; this.bufferOutput = bufferOutput; FileDownloadName = fileName; } /// <summary> /// Writes the file to the response. /// </summary> /// <param name="response">The response object.</param> protected override void WriteFile(System.Web.HttpResponseBase response) { response.Buffer = bufferOutput; content(response.OutputStream); } } 控制器方法现在是这样的: public ActionResult Export(int id) { return new FileGeneratingResult(id + ".csv","text/csv",stream => this.GenerateExportFile(id,stream)); } public void GenerateExportFile(int id,Stream stream) { stream.Write(/**/); } 请注意,如果缓冲关闭, stream.Write(/**/); 变得非常慢解决方案是使用BufferedStream。在一种情况下,这样做的性能提高了大约100倍。看到 Unbuffered Output Very Slow (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.NET MVC WebApi:没有为此对象定义的无
- asp.net-mvc – 存储网站图像的最佳方式
- asp.net – 谷歌Chrome在崩溃后恢复会话cookie,如何避免?
- 如何在Asp.Net页面中包含Javascript文件
- ASP.NET WEB API入门实例
- asp.net – Python / web scrape / aspx – 没有表格时人性
- ASP.NET Core中Server.Transfer的替代方案
- asp.net-mvc – 我如何从MVC3 Razor Controller调用webserv
- asp.net-mvc – 有没有MVC方式做ASCX?
- asp.net-mvc – 如何根据枚举值检查单选按钮
推荐文章
站长推荐
- 判断应用程序是ASP.NET 1.1还是ASP.NET 2.0的方法
- asp.net-mvc-3 – 以下部分已定义,但尚未为布局页
- [Hei.Captcha] Asp.Net Core 跨平台验证码实现
- asp.net – 如何对跨项目共享的资源进行版本控制
- asp.net – Page.Request.UserHostAddress的格式
- asp.net – 无Cookie属性web.config
- 添加依赖于.net核心csproj文件
- 使用Asp.net Web API时,使用DataContract和DataM
- asp.net-mvc-3 – ASP.NET MVC 3一对多表格
- 取消选中时,ASP.NET CheckBox不会启动CheckedCha
热点阅读