RSS Handler : HTTP Handlers « Development « ASP.NET Tutorial






File: App_Code\RSSHandler.cs


using System;
using System.Web;
using System.Net;
using System.IO;

namespace MyNamespace
{
    public class RSSHandler : IHttpAsyncHandler
    {
        private HttpContext _context;
        private WebRequest _request;

        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            _context = context;
            _request = WebRequest.Create ("http://msdn.microsoft.com/asp.net/rss.xml");
            return _request.BeginGetResponse(cb, extraData);
        }

        public void EndProcessRequest(IAsyncResult result)
        {
            string rss = String.Empty;
            WebResponse response = _request.EndGetResponse(result);
            using (response)
            {
               StreamReader reader = new StreamReader(response.GetResponseStream());
               rss = reader.ReadToEnd();
            }
            _context.Response.Write(rss);
        }

        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            throw new Exception("The ProcessRequest method is not implemented.");
        }
    }
}

Register it in your web configuration file. 
File: Web.Config

<configuration>
    <system.web>

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

    </system.web>
</configuration>

If you have a news reader, such as SharpReader, then you can enter a path like the following in the reader's address bar:

http://localhost:2026/YourApp/news.rss

File: ShowRSSHandler.aspx

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    void Page_Load()
    {
        string pagePath = Request.Url.OriginalString;
        string rssPath = Path.ChangeExtension(pagePath, ".rss");
        srcRSS.DataFile = rssPath;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show RSS Handler</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <asp:GridView
        id="grdRSS"
        DataSourceID="srcRSS"
        AutoGenerateColumns="false"
        Runat="server">
        <Columns>
        <asp:TemplateField HeaderText="Articles">
        <ItemTemplate>
            <asp:HyperLink
                id="lnkRSS"
                Text='<%# XPath("title") %>'
                NavigateUrl='<%# XPath("link") %>'
                Runat="server" />
        </ItemTemplate>
        </asp:TemplateField>
        </Columns>
    </asp:GridView>

    <asp:XmlDataSource
        id="srcRSS"
        XPath="//item"
        Runat="server" />
    </div>
    </form>
</body>
</html>








9.24.HTTP Handlers
9.24.1.Creating HTTP Handlers
9.24.2.Creating a Generic Handler
9.24.3.HelloWorld HttpHandler (VB)
9.24.4.Implementing the IHttpHandler Interface
9.24.5.RSS Handler
9.24.6.Creating a Custom HTTP Handler
9.24.7.Log user in HttpModule
9.24.8.Source viewer Http Handler