加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – C#MVC对浏览器的即时响应?

发布时间:2020-12-16 06:36:43 所属栏目:asp.Net 来源:网络整理
导读:再次,问MVC noob问题.原谅我缺乏经验. 我有一种情况,我使用MVC路由返回一个大型XML文件.有时它可能非常大.目前,我正在使用StringBuilder来构建我想要的XML输出,然后像这样返回它: var sb = new StringBuilder();XmlObject.WriteXml(sb);return Content(sb.T
再次,问MVC noob问题.原谅我缺乏经验.

我有一种情况,我使用MVC路由返回一个大型XML文件.有时它可能非常大.目前,我正在使用StringBuilder来构建我想要的XML输出,然后像这样返回它:

var sb = new StringBuilder();
XmlObject.WriteXml(sb);
return Content(sb.ToString(),"text/xml",Encoding.UTF8);

我遇到的是(由于各种原因)XML博客可能需要很长时间才能生成.

在XmlObject.WriteXml()方法中,调用了许多其他小方法,这些方法在调用时输出XML的一些部分,因此我开始构建一个XML字符串,它只需要一段时间才能完成.这些方法中的每一个都接受StringBuilder作为参数,因此可以创建一个然后将其传递到整个地方,在每个小方法中使用sb.Append()来构建最终的XML blob.

好的,所以我想做的就是在字符串开始构建后立即向客户端返回一些东西.在Webforms中,我会用HttpResponse替换所有StringBuilder参数,并使用HttpResponse.Write()而不是StringBuilder.Append(),方式类似于:

this.Response.BufferOutput = false;
XmlObject.WriteXml(Response);

然后,当每个小部分XML写入Reponse时,文本将被发送到客户端.

我遇到的问题是ActionResult必须有一个return语句.我不知道如何使用MVC路线和ActionResult在类似的时尚中对待.也许我需要使用ActionResult以外的东西?

谢谢大家!

解决方法

如果它不需要是MVC操作的结果,并且您不想破坏可测试性/封装,那么您可以按照我们一直这样做的方式执行它 – 使用直接流入响应的自定义IHttpHandler.

UPDATE

样本可能没有意义 – 你的问题中有这个概念.只有扭曲才能跳过StringBuilder并使用XmlTextWriter集流式传输到Response.OutputStream以跳过中间人.

也就是说,现在我正在阅读你正在做的事情,我个人会采取“构建离线和合理缓存”的角度,而不是担心流式传输.它可能更容易处理罐头而不是生活.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读