public ActionResult Feed(string format)
{
var posts = _index.GetBlogPosts().OrderByDescending(x => x.PostedAt);
// Create feed items.
var items = new List<SyndicationItem>();
foreach (var post in posts)
{
var feedItem = new SyndicationItem
{
Content = new TextSyndicationContent(post.FeedBody, TextSyndicationContentKind.Html),
Id = post.Id,
PublishDate = post.PostedAt,
Title = new TextSyndicationContent(post.Title, TextSyndicationContentKind.Plaintext),
};
var url = string.Concat("http://cakebuild.net", LinkHelper.GetLink(post));
feedItem.Links.Add(new SyndicationLink(new Uri(url)));
items.Add(feedItem);
}
// Create the feed.
var feed = new SyndicationFeed(items)
{
Title = new TextSyndicationContent("Cake", TextSyndicationContentKind.Plaintext),
Description = new TextSyndicationContent("The Cake blog feed", TextSyndicationContentKind.Plaintext)
};
// Write the feed as a response.
// TODO: Cache this at start up?
using (var ms = new MemoryStream())
{
var writer = XmlWriter.Create(ms);
var contentType = "application/atom+xml";
if (string.Equals("rss", format, StringComparison.InvariantCultureIgnoreCase))
{
feed.SaveAsRss20(writer);
contentType = "application/rss+xml";
}
else
{
feed.SaveAsAtom10(writer);
}
writer.Flush();
var text = Encoding.UTF8.GetString(ms.ToArray());
return Content(text, contentType, Encoding.UTF8);
}
}