2009-05-18 19 views
54

Duplicar posibles:
What is the best way to return XML from a controller's action in ASP.NET MVC?Cómo devolver una cadena XML como un resultado de la acción en MVC

soy capaz de volver JSON y vistas parciales (html) como un ActionResult válida , pero ¿cómo se devolvería una cadena XML?

+0

Utilice la XmlResult de [MvcContrib] (http://mvccontrib.codeplex.com) en CodePlex. También esto parece ser una [pregunta duplicada] (http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return-xml-from-a-controllers-action-in-asp -net-mvc). – MotoWilliams

Respuesta

127

Puede usar return this.Content(xmlString, "text/xml"); para devolver una cadena XML construida a partir de una acción.

+0

Excelente respuesta, gracias – Rippo

+1

Si está trabajando con Linq en XML, crear un formulario de cadena del documento es un desperdicio: es [mejor trabajar con transmisiones] (http://stackoverflow.com/a/12718046/24874) . –

7

Para JSON/XML He escrito un XML/JSON Action Filter que hace que sea muy fácil de abordar sin manejar casos especiales en tu controlador de acción (que es lo que pareces estar haciendo).

+0

Para cualquiera que lea esta publicación, sin dudas revise su filtro ... funciona bien. +1 a aleemb para compartir! – Mark

4

Otra manera de hacer esto es mediante el uso XDocument:

using System.Xml.Linq; 

public XDocument ExportXml() 
{ 
    Response.AddHeader("Content-Type", "text/xml"); 

    return XDocument.Parse("<xml>..."); 
} 
+0

Algunos experimentos en MVC 4 (y posiblemente versiones anteriores) sugieren que el tipo MIME devuelto aquí es 'text/html'. –

4

Si usted está construyendo el XML utilizando LINQ to XML entonces check out my answer here. Se le permite escribir código como este:

public ActionResult MyXmlAction() 
{ 
    var xml = new XDocument(
     new XElement("root", 
      new XAttribute("version", "2.0"), 
      new XElement("child", "Hello World!"))); 

    return new XmlActionResult(xml); 
} 
Cuestiones relacionadas