2009-05-18 2 views
54

Можно создать дубликат:
What is the best way to return XML from a controller's action in ASP.NET MVC?Как вернуть строку XML как результат действия в MVC

Я могу вернуть JSON и частичным видом (HTML) в качестве действительного ActionResult , но как вернуть строку XML?

+0

Используйте XmlResult из [MvcContrib] (http://mvccontrib.codeplex.com) на Codeplex. Также это кажется [дублирующим вопросом] (http://stackoverflow.com/questions/134905/what-is-the-best-way-to-return-xml-from-a-controllers-action-in-asp -сетью-MVC). – MotoWilliams

ответ

127

Вы можете использовать return this.Content(xmlString, "text/xml"); для возврата построенной строки XML из действия.

+0

Отличный ответ, спасибо – Rippo

+1

Если вы работаете с Linq для XML, создание строковой формы документа бесполезно - лучше работать с потоками (http://stackoverflow.com/a/12718046/24874) , –

7

Для JSON/XML я написал XML/JSON Action Filter, что позволяет легко справиться без обработки особых случаев в вашем обработчике действий (это то, что вы, кажется, делаете).

+0

Для всех, кто читает этот пост - определенно проверяйте его фильтр ... он работает хорошо. +1 to aleemb для обмена! – Mark

4

Другой способ сделать это с помощью XDocument:

using System.Xml.Linq; 

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

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

Некоторые эксперименты в MVC 4 (и, возможно, более ранние версии) говорят о том, что возвращаемый здесь тип MIME является «text/html». –

4

Если вы создаете XML с помощью Linq к XML затем check out my answer here. Это позволяет писать код, как это:

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

    return new XmlActionResult(xml); 
}