如何使用C#在asp.net下载xml文件

时间:2012-08-08 08:42:32

标签: xml asp.net-mvc asp.net-mvc-3 c#-4.0

我正在使用网页应用 asp.net with mvc3 。我是mvc3的新手。我的网页上有一个下载按钮。当我要点击下载按钮时,我希望能够打开该XML文件

我在 ActionResult 中尝试了一些代码更改,但我没有打开文件。通过使用下面提到的代码,我得到一个下载弹出窗口。每当我要打开文件时,我都会遇到一些异常,如下所示。谁能帮助我这样做?帮我解决这个问题。 : - )

先谢谢。

我在控制器中的代码是:

public FileResult Download(string id)
{
    string fid = Convert.ToString(id);

    var model = service.GetAllDefinitions().First(x => x.ID == id);
    var definitionDetails = new StatisticDefinitionModel(model);
    var definition = definitionDetails.ToXml;

    string fileName = definitionDetails.Name + ".xml";
    string contentType = "text/xml";

    return File(Encoding.Unicode.GetBytes(definition), contentType, fileName);
   }

例外是:

The XML page cannot be displayed 
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. 


--------------------------------------------------------------------------------

A name was started with an invalid character. Error processing   resource 'file:///C:/Users/asub/Downloads/fileNamegd...

<

2 个答案:

答案 0 :(得分:0)

如果你返回FileResult,它将是文件,如果你返回字符串,它将在浏览器中打开。

<强>更新: 此代码将返回要下载的文件

public FileResult GetXmlFile()
{
    string xml=""; //string presented xml
    var stream = new MemoryStream();
    var writer = XmlWriter.Create(stream);
    writer.WriteRaw(xml);
    stream.Position = 0;
    var fileStreamResult = File(stream, "application/octet-stream", "xml.xml");
    return fileStreamResult;        
}

答案 1 :(得分:0)

您无法传递字节数组,需要一个Stream。只需传递定义中的流:

    public FileResult Download(string id) {
        string fid = Convert.ToString(id);

        var model = service.GetAllDefinitions().First(x => x.ID == id);
        var definitionDetails = new StatisticDefinitionModel(model);
        var definition = definitionDetails.ToXml;

        string fileName = definitionDetails.Name + ".xml";
        string contentType = "text/xml";

        return File(new MemoryStream(Encoding.Unicode.GetBytes(definition)), contentType, fileName);
    }