The feed url in this example would be http://myserver/myappname/feed
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) { _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 class FeedController : Controller { private readonly IPostingDataSource _db; private static readonly Settings Settings = new Settings(); private const int ItemContentLength = 500; public FeedController() { _db = new PostingDbContext(); } public ActionResult Index() { string appUrl = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath; string detailsUrl = appUrl + "/Home/Details/"; var postItems = _db.Postings .OrderByDescending(x => x.AddedDate) .Take(20) .AsEnumerable() .Select(p => new SyndicationItem(p.Title, TruncateLongString(p.Body, ItemContentLength, true), new Uri(detailsUrl + p.Id), p.Id.ToString(), new DateTimeOffset(p.AddedDate))); var feed = new SyndicationFeed("bCay Auctions", "Buy! Sell!", new Uri(appUrl), postItems) { Copyright = new TextSyndicationContent("Codestruck Productions"), Language = "en-US" }; feed.Authors.Add(new SyndicationPerson(Settings.Email, "Codestruck", appUrl)); // Can change from Atom to RSS here return new FeedResult(new Atom10FeedFormatter(feed)); } private static string TruncateLongString(string str, int maxLength, bool addEllipsis) { if (str.Length <= maxLength) return str; string result = str.Substring(0, Math.Min(str.Length, maxLength)); if (addEllipsis) result += "..."; return result; } }
No comments:
Post a Comment