在 ASP.NET MVC Web 應用程式中輸出 RSS Feeds

來源:互聯網
上載者:User

標籤:

RSS全稱Really Simple Syndication。一些更新頻率較高的網站可以通過RSS讓訂閱者快速擷取更新資訊。RSS文檔需遵守XML規範的,其中必需包含標題、連結、描述資訊,還可以包含發布時間、最後更新時間等資訊。

本文將介紹通過LINQ to XML產生XML文檔,並在ASP.NET MVC Web應用程式中輸出。

在產生RSS文檔前,先簡單瞭解一下RSS的結構。根節點rss下有channel節點,channel節點的一些子節點(title,link,description)包含了該RSS的部分描述資訊。channel下可包含多個item節點用來表示多個內容資訊,如部落格中的文章、論壇中的文章。

 

代碼 1 <rss version="2.0">
 2   <channel>
 3     <title>channel標題</title>
 4     <link>網頁地址</link>
 5     <description>channel描述</description>
 6     <item>
 7       <title>內容1標題</title>
 8       <description>內容1描述</description>
 9       <link>內容1連結</link>
10     </item>
11     <item>
12       <title>內容2標題</title>
13       <description>內容2描述</description>
14       <link>內容2連結</link>    </item>
15   </channel>
16 </rss>

 

1. 用LINQ to XML產生類似上述的文檔。

1.1 建立一個XDocument,添加根節點和相關屬性描述。

 

代碼1 XDocument doc = new XDocument(
2     new XDeclaration("1.0", "utf-8", "yes"),    // XML文檔聲明
3     new XElement("rss",    // 根節點
4     new XAttribute("version", "2.0"),    // rss節點的屬性
5     new XElement(channel    // rss的子節點channel
6         )));                    )));

 

 

1.2 處理channel節點和它的相關描述。

 

代碼1 XElement channel = new XElement("channel");    // channel節點
2 channel.Add(new XElement[]{
3     new XElement("title","Test"),    // channel標題
4     new XElement("link","http://localhost"),    // 頁面連結
5     new XElement("description","Test RSS")    // channel描述
6 });

 

 

1.3 往channel節點增加內容資訊,rssFeedList是 List<RssFeed>類型的。由於item數量不固定,這裡用了foreach將list中的每一個內容資訊都加到channel。

 

代碼 1 foreach (var rssFeed in rssFeedList)    // 對rssFeed集合中的每個元素進行處理
 2 {
 3     XElement item = new XElement("item", new XElement[]{    // 產生一個新的item節點
 4         new XElement("title",rssFeed.Title),    // 為新的item節點添加子節點
 5         new XElement("description",rssFeed.Description),
 6         new XElement("link",rssFeed.Link),
 7         new XElement("pubDate",rssFeed.PublishDate)
 8     });
 9     channel.Add(item);    // 將新的item節點添加到channel中
10 }

 

 

2. 建立RssFeedResult類

我們寫一個RssFeedResult類,繼承自ActionResult,以便在ASP.NET MVC的controller中返回RSS。關於這部分內容可參考之前的一篇文章《讓ASP.NET MVC頁面返回不同類型的內容》。

 

代碼 1 public class RssFeedResult : ActionResult
 2 {
 3     List<RssFeed> Data { get; set; }
 4 
 5     public RssFeedResult(List<RssFeed> data)
 6     {
 7         Data = data;
 8     }
 9 
10     public override void ExecuteResult(ControllerContext context)
11     {
12         if (context == null)
13         {
14             throw new ArgumentNullException("context");
15         }
16 
17         HttpResponseBase response = context.HttpContext.Response;
18         response.ContentType = "text/xml";    // 設定HTTP頭中的ContentType
19         XDocument result= RssFeedHelper.GetRssFeed(Data);    // 擷取XML資料
20         response.Write(result.ToString());    // 將XML資料寫入response中
21     }
22 }

 

 

3. 在controller中使用

我們只要在controller中調用RssFeedResult(rssFeedList)方法即可返回RSS頁面了。

 

public RssFeedResult Rss()
{
    // 添加2個測試用的資料
    RssFeed r1 = new RssFeed { Description = "Test1", Link = "http://localhost/1", Title = "Test1", PublishDate = DateTime.Now };
    RssFeed r2 = new RssFeed { Description = "Test2", Link = "http://localhost/2", Title = "Test2", PublishDate = DateTime.Now };
    List<RssFeed> rssFeedList = new List<RssFeed>();
    rssFeedList.Add(r1);
    rssFeedList.Add(r2);
            
    // 返回RSS
    return new RssFeedResult(rssFeedList);
}

 

樣本下載 (Visual Studio 2010) 

在 ASP.NET MVC Web 應用程式中輸出 RSS Feeds

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.