Si vous construisez le XML à l'aide de l'excellent cadre Linq-to-XML, cette approche vous sera utile.
Je crée un XDocument
dans la méthode d'action.
public ActionResult MyXmlAction()
{
// Create your own XDocument according to your requirements
var xml = new XDocument(
new XElement("root",
new XAttribute("version", "2.0"),
new XElement("child", "Hello World!")));
return new XmlActionResult(xml);
}
Ce produit réutilisable et personnalisé ActionResult
sérialise le XML pour vous.
public sealed class XmlActionResult : ActionResult
{
private readonly XDocument _document;
public Formatting Formatting { get; set; }
public string MimeType { get; set; }
public XmlActionResult(XDocument document)
{
if (document == null)
throw new ArgumentNullException("document");
_document = document;
// Default values
MimeType = "text/xml";
Formatting = Formatting.None;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Clear();
context.HttpContext.Response.ContentType = MimeType;
using (var writer = new XmlTextWriter(context.HttpContext.Response.OutputStream, Encoding.UTF8) { Formatting = Formatting })
_document.WriteTo(writer);
}
}
Vous pouvez spécifier un type MIME (tel que application/rss+xml
) et si la sortie doit être indentée si nécessaire. Ces deux propriétés ont des valeurs par défaut raisonnables.
Si vous avez besoin d'un encodage autre que UTF8, il est simple d'ajouter une propriété pour cela aussi.