2010-05-12 37 views
2

我認爲MVC應該讓所有這些變得更容易,但我嘗試了各種方法並解決問題。如何在asp.net mvc網站上將內存中的xml文檔作爲附件進行流式傳輸

如果我嘗試了這個問題(相應地改變內容類型)接受的答案... How to create file and return it via FileResult in ASP.NET MVC?

...我惹上麻煩,因爲我在XML文件的編碼是UTF-16。

我得到的錯誤是:從當前編碼

切換到指定的編碼不支持。

這表明我需要告訴MVC我需要UTF-16。或者,我想要一個使用二進制而不是文本的不同方法。

回答

3

這是我一直定居:

public FileStreamResult DownloadXML() 
{ 
    string name = "file.xml"; 
    XmlDocument doc = getMyXML(); 
    System.Text.Encoding enc = System.Text.Encoding.Unicode; 
    MemoryStream str = new MemoryStream(enc.GetBytes(doc.OuterXml)); 

    return File(str, "text/xml", name); 
} 

我不認爲這是完美的,我很可能只是用FileContentResult而不是與內存流費心。另外,我不認爲IE喜歡unicode。它抱怨說,「一個名字是從一個無效字符開始的」,儘管xml很好,並且很高興在Firefox中打開。

然而它似乎是做這項工作。

2
public FileStreamResult DownloadXML() 
    { 
     string name = "file.xml"; 
     XmlDocument doc = getMyXML(); 
     var str = new MemoryStream(); 
     doc.Save(str); 
     str.Flush(); 
     str.Position = 0; 

     return File(str, "text/xml", name); 
    } 

請注意,調用Flush並設置Position是必須執行的操作。

保存到流比通過OuterXml初始化更好:1)減少摩擦,2)生成的XML被格式化而不是單行字符串。

+0

重要的是要調用'沖洗&位置= 0'! – Jaime 2012-07-05 01:20:58

相關問題