在 ASP.NET MVC Web 应用程序中输出 RSS Feeds
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的更多相关文章
- ASP.NET MVC3 Web应用程序中启用GZip压缩示例
http://www.mzwu.com/article.asp?id=3284 自定义一个筛选器,继承于GZipAttribute: using System;using System.IO.Comp ...
- ASP.NET MVC & Web API项目中集成MEF
1.实现方式 //WebApi需要实现的接口 System.Web.Http.Dependencies.IDependencyResolver //MVC需要实现的接口 System.Web.Mvc. ...
- ASP.NET MVC - 探究应用程序文件夹
为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下 ...
- ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/ 谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...
- ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)
在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...
- ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)
在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...
- [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序
本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...
- 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序
1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
随机推荐
- java中的IO流
Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...
- thinkphp分页实现
以上为我对于thinkphp分页的实现效果,两种方法,一种调用公共函数中的函数方法(参考http://www.cnblogs.com/tianguook/p/4326613.html),一种是在模型中 ...
- PHP+Ajax 异步通讯注册验证
HTML代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- Yii通过控制台命令创建定时任务
假设Yii项目路径为 /home/apps/ 1. 创建文件 /home/apps/protected/commands/crons.php <?php $yii = '/home/apps/f ...
- DELPHI关于文件的操作
caption:= ExtractFileExt(‘带路径,带扩展名的文件名’);//返回的就是扩展名 caption:= ChangeFileExt(ExtractFileName(‘带路径,带扩 ...
- 字符编码笔记:ASCII,Unicode和UTF-8【转载】
作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...
- 我写了个教程《一步步教你把ubuntu安装到U盘》
一步步教你把ubuntu安装到U盘 作者 Val 2452013147@qq.com 原因: 由于某些原因(学生党),需要把ubuntu安装到U盘到处走,百度了一下,教程都不是很好,要么很复杂,要么不 ...
- ExtJS4.2学习(16)制作表单(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-12-10/188.html --------------- ...
- BZOJ 3993 [SDOI 2015] 星际战争 解题报告
首先我们可以二分答案. 假设当前二分出来的答案是 $Ans$ ,那么我们考虑用网络流检验: 设武器为 $X$,第 $i$ 个武器的攻击力为 $B_i$: 设机器人为 $Y$,第 $i$ 个机器人的装甲 ...
- Html中如何让超链接a、图片img居中
一.问题来源 修改博客页面时,突然想到 二.解决办法 2.1原来办法 在img和a中加入align="center",发现不行 2.2百度答案 <div align=&quo ...