使用响应流的MVC控制器

时间:2011-08-23 15:21:33

标签: asp.net-mvc asp.net-mvc-3 actionresult

我正在使用MVC 3我想动态创建一个CSV文件供下载,但我不确定正确的MVC导向方法。

在传统的ASP.net中,我会写一些类似的东西:

Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", attachment;filename='Test.csv'");
Response.Write("1,2,3");
Response.End();

我查看了ContentResult操作,但似乎我需要将结果创建为字符串,即

返回内容(myData,“text / csv”);

我想,我可以构建一个字符串,但由于这些文件可能长达几千行,这对我来说似乎效率低下。

有人能指出我正确的方向吗?感谢。

4 个答案:

答案 0 :(得分:14)

我找到了一个解决这个问题的方法。您可以简单地定义action方法以返回EmptyResult()并直接写入响应流。例如:

public ActionResult RobotsText() {
    Response.ContentType = "text/plain";
    Response.Write("User-agent: *\r\nAllow: /");
    return new EmptyResult();
}

这似乎没有任何问题。不确定'MVC'是怎么回事......

答案 1 :(得分:8)

我昨天在类似的问题上花了一些时间,这是如何正确地做到这一点:

@XmlSchema(
    elementFormDefault=XmlNsForm.QUALIFIED,
    namespace="http://www.example.com/FOO",
    xmlns={@XmlNs(prefix="bar",
                  namespaceURI="http://www.example.com/BAR")}
)
package blog.prefix;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

答案 2 :(得分:3)

答案 3 :(得分:-2)

尝试这样的事情:

public ActionResult CreateReport(string report, string writer)
{
    var stream = new MemoryStream();
    var streamWriter = new StreamWriter(stream);

    _generateReport.GenerateReport(report, writer);

    streamWriter.Flush();
    stream.Seek(0, SeekOrigin.Begin);

    return new FileStreamResult(stream, writer.MimeType);
}