We start off with a FeedResult class, which inherits from ActionResult
using System; using System.ServiceModel.Syndication; using System.Text; using System.Web; using System.Web.Mvc; using System.Xml; namespace Data.Controllers { public class FeedResult : ActionResult { public Encoding ContentEncoding { get; set; } public string ContentType { get; set; } private readonly SyndicationFeedFormatter feed; public SyndicationFeedFormatter Feed{ get { return feed; } } public FeedResult(SyndicationFeedFormatter feed) { this.feed = feed; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); HttpResponseBase response = context.HttpContext.Response; response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/rss+xml"; if (ContentEncoding != null) response.ContentEncoding = ContentEncoding; if (feed != null) using (var xmlWriter = new XmlTextWriter(response.Output)) { xmlWriter.Formatting = Formatting.Indented; feed.WriteTo(xmlWriter); } } } }
public ActionResult MyRss() { var postItems = new List(); using (Repository rep = new Repository()) { var list = rep.GetData(); if (list != null && list.Count() > 0) { var itemList = list.Take(20); foreach (var item in itemList) { postItems.Add( new SyndicationItem( item.Title, //a Title for the RSS Item item.Description, //a short description for the Item new Uri("http://example.com/" + item.Link) //a link to this item ) ); } } } var feed = new SyndicationFeed("My Site Name", "", new Uri("http://example.com/"), postItems) { Copyright = new TextSyndicationContent("Copyright " + DateTime.Now.Year + " My Site", TextSyndicationContentKind.Plaintext), Language = "en-US" }; return new FeedResult(new Rss20FeedFormatter(feed)); }
Quick Links
Legal Stuff