ASP.NET MVC:将数据作为文件下载到本地计算机。另存为对话框

ASP.NET MVC: Dowloading data as a file to local computer. SAve As dialog

我通过以下代码在 ASP.NET MVC3 中动态生成一个 xml(序列化我的自定义类型 XMLDocType):

XMLDocType XMLdoc = new XMLDocType();
… generating contente for XMLdoc … 
XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));

TextWriter writer = new StreamWriter("xmloutput.xml");

xml.Serialize(writer, XMLdoc);

writer.Close();

如何通过浏览器中的正常下载过程(即打开“另存为”对话框)将 xml 内容下载到本地计算机(而不是服务器)?

谢谢。

您可以在 MVC 操作中使用扩展 ActionResult 和 return 的 class。此外,您写入 MemoryStream 而不是写入本地服务器文件,并且 return 将其作为控制器操作的响应发送给用户。

public class FileResult : ActionResult
{
    public String ContentType { get; set; }
    public byte[] FileBytes { get; set; }
    public String SourceFilename { get; set; }

    public FileResult(byte[] sourceStream, String contentType, String sourceFilename)
    {
        FileBytes = sourceStream;
        SourceFilename = sourceFilename;
        ContentType = contentType;
    } 
}

public ActionResult DownloadFile()
{   
    MemoryStream memoryStream = new MemoryStream(); 
    XMLDocType XMLdoc = new XMLDocType();
    XmlSerializer xml = new XmlSerializer(typeof(XMLDocType));
    TextWriter writer = new StreamWriter(memoryStream);
    xml.Serialize(writer, XMLdoc);

    FileResult file = new FileResult(memoryStream.ToArray(), "text/xml", "MyXMLFile.xml");

    writer.Close();

    return file;
}