воскресенье, 13 февраля 2011 г.

Добавляем RSS фид на сайт ASP.NET за 5 минут

RSS фиды уже давно стали неотъемлемой частью интернета. И к тому же еще очень удобный способ получения новой информации.

Для меня фид больше чем технология, это признак того, буду ли я дальше пользоваться сайтом или нет. 90% всей информации я получаю как раз через них, а если на сайте отсутствует такая возможность, то сайт для меня "уходит в историю".

Разрабатывая сайт на ASP.NET понадобилось внедрить RSS фид, статьи на эту тему либо просто не до конца описывают механизм внедрения, либо вообще имеют программные ошибки. Вот я решил немного пролить свет на эту задачу.

Изобретать велосипед не буду, так что за основу берем ASP.NET RSS Toolkit. Данная библиотека обладает неплохим функционалом, детально смотрим на сайте http://aspnetrsstoolkit.codeplex.com/.

Внедрение Rss фида на сайт

Для внедрения Rss фида на сайт нам понадобится сделать 4-и действия:

1. Качаем последнюю версию библиотеке ASP.NET RSS Toolkit. ASP.NET RSS Toolkit, Downloads.

2. Добавляем ссылку на библиотеку RssToolkit.dll в проект (Add reference).

3. Добавляем в проект новый элемент "Generic Handler" (например, RssFeed.ashx, в дальнейшем буду использовать ссылку на класс RssFeed).

4. Наследуем класс RssFeed от RssToolkit.Rss.RssDocumentHttpHandler и переопределяем метод PopulateRss, в котором и будет заполнен объект RSS.

public class RssFeed : RssDocumentHttpHandler
{
    protected override void PopulateRss(string rssName, string userName)
    {
        Rss.Channel = new RssChannel();
        Rss.Version = "2.0";
        Rss.Channel.Title = "Тестовый RSS фид за 5 минут";
        if (!string.IsNullOrEmpty(rssName))
        {
            Rss.Channel.Title += " '" + rssName + "'";
        }
        
        if (!string.IsNullOrEmpty(userName))
        {
            Rss.Channel.Title += " (generated for " + userName + ")";
        }

        Rss.Channel.PubDate = DateTime.Now.ToString("R");
        Rss.Channel.LastBuildDate = DateTime.Now.ToString("R"); ;
        Rss.Channel.Description = "Тестовый RSS фид за 5 минут";
        Rss.Channel.Link = "http://localhost/RssFeed.ashx";

        Rss.Channel.Items = new List<rssitem>();

        var item = new RssItem
                       {
                           Title = "Название...",
                           Description = "Описание...",
                           PubDate = DateTime.Now.ToString("R"),
                           Link = "http://localhost/Default.aspx"
                       };
        Rss.Channel.Items.Add(item);

        item = new RssItem
                   {
                       Title = "Название...",
                       Description = "Описание...",
                       PubDate = DateTime.Now.ToString("R"),
                       Link = "http://localhost/News.aspx"
                   };
        Rss.Channel.Items.Add(item);
    }
}

Вот и все, переходим на нашу страницу и получаем RSS фид.

Распознавание браузером.

В ASP.NET RSS Toolkit 2.0.0.0 есть один небольшой баг. Для фида устанавливается Content-Type в значение "text/xml". В этом случае большинство современных браузеров не считают такой контент фидом (в любой rss "читалке" фид будет работать). Исправить это можно поменяв Content-Type на значение "application/rss+xml".

Внес необходимую правку, для скачивания воспользуйтесь следующей ссылкой - RssToolkit.dll.

4 комментария:

  1. клевая статья, НО
    как я могу получать request,
    мне нужно получать переменные с адресной строки запроса GET

    ОтветитьУдалить
  2. Получение Get параметров (коллекция): Context.Request.QueryString
    Получение Get параметров (строка): Context.Request.Url.PathAndQuery

    ОтветитьУдалить
  3. Здравствуйте, к сожалению появляется ошибка: "Ошибка 2 Не удалось найти имя типа или пространства имен "RssDocumentHttpHandler" (пропущена директива using или ссылка на сборку?) C:\Users\admin\Documents\Visual Studio 2010\Projects\WebApplication7\WebApplication7\RssFeed.ashx.cs 10 28 WebApplication7"

    Не могли бы Вы сказать, что нужно подправить?
    Файл: C:\Users\admin\Documents\Visual Studio 2010\Projects\WebApplication7\WebApplication7\RssFeed.ashx.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using RssToolkit;

    ///
    /// Сводное описание для Handler1
    ///
    public class RssFeed : RssDocumentHttpHandler
    {

    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType = "text/plain";
    context.Response.Write("Hello World");
    }

    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }

    ОтветитьУдалить
    Ответы
    1. Нужно подключить библиотеку RssToolkit.dll и дававить using в код.

      Удалить