How do I output xml with ASP.NET razor?
I found an example of an rss feed produced with a razor view here:
Basically you have to set the Response.ContentType
to "text/xml"
, and then you can just write your xml as if it was html.
You have to scroll down to see the actual code so I'll copy it here:
@{ var db = Database.OpenFile("Database.sdf"); var getRss = db.Query("SELECT TOP(5) * FROM Table" ); Response.ContentType = "text/xml";}<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/"> <channel> <title>Website name</title> <link>website link</link> <description>News for website</description> <dc:language>en-gb</dc:language> <dc:creator>email</dc:creator> <dc:rights>Copyright 2010</dc:rights> <admin:generatorAgent rdf:resource="http://www.styledna.net/" /> @foreach (var row in getRss) { <item> <title>@row.title</title> <link>@row.link</link> <description> some html desc for the item </description> </item> } </channel></rss>
If you prefer you can instead make the content type change from your view action, like so:
public ActionResult MyAction() { Response.ContentType = "text/xml"; return View();}
For anyone trying to do this is ASP.NET Core, you can find the Response as a property of the Context:
@{ Context.Response.ContentType = "text/xml";}<?xml version="1.0" encoding="UTF-8" ?><doc> ...</doc>
Although I found setting the content type in the Action worked perfectly well (as suggested by @Luis above)