1. Jak utworzyć kanał RSS w ASP.NET MVC?

    ASP.NET MVC 2 w standardzie nie posiada niestety żadnego ActionResult, które zwracałoby nam treść w formacie RSS. Nie mniej jednak nic nie stoi na przeszkodzie, aby dopisać klasę dziedziczącą z ActionResult, która będzie generować taki kanał.
    W tym wpisie prezentuję jak to zrobić.

    Pierwszym krokiem do implementacji kanału RSS jest utworzenie klasy pomocniczej RssResult, która prezentuje się następująco:

    using System.Web.Mvc;
    using System.ServiceModel.Syndication;
    using System.Xml;
    
    namespace luktom.Samples
    {
        public class RssResult : ActionResult
        {
            public SyndicationFeed Feed { get; set; }
    
            public override void ExecuteResult(ControllerContext context)
            {
                context.HttpContext.Response.ContentType = "application/rss+xml";
    
                Rss20FeedFormatter rss = new Rss20FeedFormatter(Feed);
    
                using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
                {
                    rss.WriteTo(writer);
                }
            }
        }
    }

    W przypadku, gdy namespace System.ServiceModel.Syndication i należąca do niej klasa Rss20FeedFormatter nie zostaną odnalezione, należy dodać do projektu referencję do System.ServiceModel.Web – w dokumentacji na MSDN jest błąd i przestrzeń Syndication fizycznie mieści się właśnie w System.ServiceModel.Web.dll.

    Drugim krokiem jest dodanie odpowiedniego kontrolera i stosownej akcji:

    public ActionResult RssFeed()
    {
        SyndicationFeed feed = new SyndicationFeed("luktom.net rss",
                                                   "Testowy kanał RSS",
                                                   new Uri("http://rss.luktom.net/test"));
    
        List feedItems = new List<SyndicationItem>();
    
        // tutaj dodajemy elementy do kanału
        feedItems.Add(new SyndicationItem("Element 1",
                                      "Opis elementu 1",
                                      new Uri("http://url.do/elementu1"),
                                      "unikatowy-identyfikator-1",
                                      DateTime.Now)); // data aktualizacji elementu
    
        feed.Items = feedItems;
    
        return new RssResult() { Feed = feed };
    }

    Na zakończenie sugeruję w Global.asax dodać nową trasę (route) do kanału RSS, aby w razie zmiany w kontrolerze nie mieć problemu z koniecznością aktualizacji adresu kanału RSS u klientów.

    Zobacz także

  2. 0 odpowiedzi do wpisu "Jak utworzyć kanał RSS w ASP.NET MVC?"