我认为MVC应该让这一切变得更容易,但我正在尝试各种方式并获得问题。
如果我尝试接受此问题的答案(相应地更改内容类型)...... How to create file and return it via FileResult in ASP.NET MVC?
...我遇到了麻烦,因为我在xml文件中的编码是UTF-16。
我得到的错误是:
不支持从当前编码切换到指定的编码。
这表明在某个地方我需要告诉MVC我想要UTF-16。或者,我想要一个使用二进制而不是文本的不同方法。
答案 0 :(得分:4)
这是我已经解决的问题:
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中打开。
然而它似乎可以完成这项工作。
答案 1 :(得分: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而不是单行字符串。