利用HttpHandler创建自定义后缀Rss源

转载 2011年05月28日 22:11:00

RSS如今已经可以说是随处可见,而RSS的实现方式,通常是在一个.aspx的CodeBehind文件中写一个XML文件,然后加载到 Response的OutputStream中, Rss源通常是Rss.aspx这种形式的。通过第一章学到的ISAPI的知识,再结合本章学到的关于HttpHandler的知识,很容易想到:我们可 以自定一个以 .rss 作为后缀名的文件来实现 Rss 源,比如说Article.rss。现在我们就一步步来实现它:

NOTE: 关于RSS的更多内容,可以参阅我编译的 在Web站点中创建和使用RSS源 。本文不再解释Rss是什么,如何创建Rss源,为了文章的独立性,仅给出创建过程。

Step.1 创建范例数据库

Create Table RssSample
(
    SampleId      Int Identity(1,1)    Not Null,
    Title         Varchar(100)          Not Null Constraint uq_Title Unique,
    Author        Varchar(50)              Not Null,
    PubDate       DateTime              Not Null Default GetDate(),
    [Description] Varchar(500)          Not Null,
    Link          Varchar(150)          Not Null

    Constraint pk_RssSample Primary Key(SampleId)
)
-- 插入范例数据
Insert Into RssSample(Title, Author, [Description], Link)
Values('标题1', '作者1', '文章摘要1', 'http://127.0.0.1/#' )

-- 省略 ....

Step.2 建立站点,在App_Code目录下建立RssFeedsLib.cs文件。

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Xml;
using System.Text;

namespace RssFeadsLib {
    public class RssGenerator {
       public static string GetRSS() {
           MemoryStream ms = new MemoryStream();
           XmlTextWriter writer = new XmlTextWriter(ms, null);
           SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Sample;User ID=sa;Password=sa");       //修改这里成你的数据库连接
           SqlCommand cmd = new SqlCommand("select * from RssSample order by pubdate desc", conn);

           conn.Open();
           SqlDataReader reader = cmd.ExecuteReader();
           writer.WriteStartElement("rss");
           writer.WriteAttributeString("version", "2.0");
           writer.WriteStartElement("channel");
           // Channel 下的结点静态写入
           writer.WriteElementString("title", "TraceFact.Net 技术文章");
           writer.WriteElementString("link", "http://www.tracefact.net");
           writer.WriteElementString("description", "Dedicated to asp.net...");
           writer.WriteElementString("copyright", "Copyright (C) 2007");
           writer.WriteElementString("generator", "My RSS Generator");
           // Item 结点从数据库读取
           while (reader.Read()) {
              writer.WriteStartElement("item");
              writer.WriteElementString("author", reader.GetString(reader.GetOrdinal("Author")));
              writer.WriteElementString("title",             reader.GetString(reader.GetOrdinal("title")));
              writer.WriteElementString("link", reader.GetString(reader.GetOrdinal("Link")));
              writer.WriteElementString("description", reader.GetString(reader.GetOrdinal("Description")));
              writer.WriteElementString("pubDate", reader.GetDateTime(reader.GetOrdinal("PubDate")).ToString(@"ddd, dd MMM yyyy 12:00:00 tt "));
              writer.WriteEndElement();
           }

           writer.WriteEndElement();
           writer.WriteEndElement();
           reader.Close();
           conn.Close();

           writer.BaseStream.Flush();
           writer.Flush();
           ms.Flush();

           // 将流转换成String并返回
           byte[] data = new byte[ms.Length];
           ms.Seek(0, SeekOrigin.Begin);
           ms.Read(data, 0, data.Length);
           ms.Close();
           return UTF8Encoding.UTF8.GetString(data);
       }
    }
}

Step.3 创建可以处理 .rss 后缀名的 RssHandler

我们在这个 RssFeedsLib命名空间下,再添加一个类,这个类用于处理对 .rss 后缀名文件的Http请求。

public class RSSHandler:IHttpHandler{
    public bool IsReusable
    {
       get {return false;}
    }

    public void ProcessRequest(HttpContext context){
       context.Response.ContentType = "text/xml";
       string str = RssGenerator.GetRSS();
       context.Response.Write(str);
    }
}

Step.4 在Web.config中进行配置

<httpHandlers>
    <add path="*.rss" type="RssFeadsLib.RSSHandler" verb="GET" />
</httpHandlers>

 

NOTE: 因为这个类和命名空间位于App_Code中,这里就不需要再手动编译 RssFeadsLib.cs然后将编译好的.dll应用程序集放到Bin目录中了。至于为什么可以这样,将会在 《Asp.Net 构架与安全机制 Part.5 – 页面生存周期与编译模型》中解释。

Step.5 在IIS 对ISAPI进行设置。

应该还记得在Part.1中如何在IIS中设置ISAPI来进行文件与处理程序映射:

  1. 打开IIS,选择本范例所用的站点,右键,选择“属性”。
  2. 选择“主目录”选项卡,点击“配置...”按钮。
  3. 点击“添加”,设置“可执行文件”为“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll”,设置“扩展名”为“.rss”,点“确定”。
  4. 注意,不要勾选“检查文件是否存在”复选框,这样不用创建文件,只要在地址栏输入任意以.rss后缀结尾的文件名,均会交由上面创建的Handler去处理,而不管这个文件是否存在,也不管请求的是Article.rss还是Sample.rss。

进行了这些设置以后,现在IIS就知道如何去处理对.rss后缀名文件的请求了。

Step.6 测试范例

这个时候,随便打开一个页面,比如空白的Default.aspx,然后我们在地址栏将文件改为:Article.rss(改成abc.rss也是一样),敲回车,应该可以看到如下的画面。

利用HttpHandler创建自定义后缀Rss源

本文摘自文章:《Http Handler 介绍》   作者:张子阳       RSS如今已经可以说是随处可见,而RSS的实现方式,通常是在一个.aspx的CodeBehind文件中写一个XML文件,...
  • dongxinxi
  • dongxinxi
  • 2009年07月17日 10:11
  • 876

如何制作一个RSS源,并创建小部件免费使用任何编程技巧

如何制作一个RSS源,并创建小部件免费使用任何编程技巧 有这么多不同的网站和博客,在那里,你怎么能肯定你的网站获得正确的曝光在网络上?吸引新读者到您的网站能吃苦耐劳,即使他们找你一次,你怎么知道他们会...
  • cuoeri01
  • cuoeri01
  • 2014年08月25日 15:58
  • 806

RSS源推荐大全(it版)

虽然早就有人说rss已死,但是喜欢rss的人还是相当的多,最近使用鲜果连播的安卓版,感觉非常爽,自己也喜欢收集一下rss源,在这里推荐一些比较适合it朋友的rss 互联网资讯类 译言网,顺...
  • youacai
  • youacai
  • 2012年03月23日 12:59
  • 38483

IT信息订阅 RSS源列表

 本人采用的是http://www.google.com/reader直接将下面的信息另存为xml文件,在reader中导入就可以了            Google 阅读器中 xu 的订阅    ...
  • eqxu
  • eqxu
  • 2008年02月20日 21:24
  • 9123

各大网站RSS订阅源地址

全栈工程师开发手册 (作者:栾鹏) python教程全解 十大最值得订阅的中文RSS源1、FT中文网 http://feeds.feedburner.com/ftchina2、果壳网 h...
  • luanpeng825485697
  • luanpeng825485697
  • 2017年12月07日 09:35
  • 2771

推荐一个rss源搜索引擎

推荐一个rss源搜索引擎 http://ctrlq.org/rss/
  • yangle20081982
  • yangle20081982
  • 2014年05月15日 15:18
  • 2174

rss订阅源推荐个人收集

新闻类: 百度rss新闻订阅:http://www.baidu.com/search/rss.html 网易rss订阅中心:http://www.163.com/rss ...
  • dll635281462
  • dll635281462
  • 2016年04月20日 15:50
  • 9087

RSS源收藏

有什么RSS源推荐给我吗?先列举一下我的订阅源吧(记住链接不是用来直接访问,而是粘贴进阅读器):拓宽知识类 知乎每日精选(强烈推荐):http://www.zhihu.com/rss 知乎日报(非...
  • samxx8
  • samxx8
  • 2015年07月15日 10:17
  • 2116

使用RSS管理信息获取源

1. 为什么用RSS? 现在是个信息爆炸的时代, 互联网上有干货有垃圾,一不小心就会在网上浪费大量时间还吃了一嘴狗屎。时间长了以后,估计每个人有自己的一套考量,每天该去什么地方获得有用的信息。 但是...
  • yayagepeiya
  • yayagepeiya
  • 2016年03月10日 18:20
  • 270

使用HttpHandler 来实现url路径伪静态

需要在web.config中配置 httpHandlers节点:
  • Joyhen
  • Joyhen
  • 2014年05月05日 17:31
  • 2128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用HttpHandler创建自定义后缀Rss源
举报原因:
原因补充:

(最多只允许输入30个字)