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