2009-05-18 5 views
54

Powiel możliwe:
What is the best way to return XML from a controller's action in ASP.NET MVC?Jak zwrócić ciąg XML jako wynik działania w MVC

jestem w stanie powrócić JSON oraz częściowy widok (HTML) jako ważnego ActionResult , ale jak zwróciłby ciąg znaków XML?

+0

Użyj XmlResult z [MvcContrib] (http://mvccontrib.codeplex.com) na Codeplex. To również wydaje się być [zduplikowanym pytaniem] (http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return-xml- from-i-controllers-action-in-asp -net-mvc). – MotoWilliams

Odpowiedz

127

Można użyć return this.Content(xmlString, "text/xml");, aby zwrócić zbudowany łańcuch XML z działania.

+0

Świetna odpowiedź, dziękuję – Rippo

+1

Jeśli pracujesz z Linq na XML, tworzenie ciągów znaków dokumentu jest marnotrawstwem - lepiej jest pracować ze strumieniami (http://stackoverflow.com/a/12718046/24874) . –

7

Dla JSON/XML napisałem XML/JSON Action Filter, dzięki czemu bardzo łatwo jest poradzić sobie bez zajmowania się specjalnymi przypadkami w twojej akcji akcji (robisz to, co wydajesz się robić).

+0

Dla każdego, kto czyta ten post - definitywnie sprawdź jego filtr ... działa dobrze. +1 do aleemb za udostępnienie! – Mark

4

Innym sposobem na to jest za pomocą XDocument:

using System.Xml.Linq; 

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

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

Niektóre eksperymenty w MVC 4 (i prawdopodobnie wcześniejszych wersjach) sugerują, że zwracany tutaj typ MIME to 'text/html'. –

4

Jeśli budujesz XML przy użyciu LINQ-to-XML następnie check out my answer here. To pozwala napisać kod taki jak ten:

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

    return new XmlActionResult(xml); 
}