[.NET] Exposer un flux RSS à l’aide d’un HttpHandler
Dans un précédent post, j’avais montré comment créer un flux RSS à l’aide du Framework 3.5.
A présent, nous allons voir comment exposer un flux RSS à l’aide d’un HttpHandler.
Lors d’une requête HTTP en ASP.NET une page ASPX est demandée au serveur. Dans le cas d’un HttpHandler, ce n’est plus une page qui est demandée mais une classe.
Dans un premier temps, il faut préciser à notre application ASP.NET quelle classe devra être appelée lorsque notre requête HTTP sera traitée. Pour cela, nous devons ajouter dans le fichier de configuration de notre application les éléments suivants :
<httpHandlers>
<add verb="*" path="rssfeed.axd" validate="true" type="Syndication.RssFeedHandler"/>
</httpHandlers>
L’attribut “path” indique l’url relative de la requête qui renverra vers le traitement de notre classe.
L’attribut “type” indique le nom de notre classe qui sera traitée.
Passons maintenant à la création de notre classe qui sera appelée lors du traitement de la requête. Cette classe doit implémenter l’interface IHttpHandler contenant les méthode IsReusable et ProcessRequest.
C’est dans la méthode ProcessRequest que se fera tout le traitement. En effet, elle prend en paramètre le contexte HTTP à de la requête.
Pour exposer notre flux RSS, il va donc faloir écrire le flux XML dans la réponse renvoyée au navigateur du client. Pour cela, nous allons créer un XmlWriter qui écrira dans le flux de sortie de la réponse envoyée au client :
XmlWriter wr = XmlWriter.Create(context.Response.OutputStream);
Il suffit ensuite de créer notre flux RSS (voir ce post) et de l’écrire dans notre XmlWriter.
/*
Voir post précédent pour la création du flux
*/Atom10FeedFormatter formatter = new Atom10FeedFormatter(feed);
formatter.WriteTo(wr);
wr.Flush();
wr.Close();
Désormais, lorsque l’on navigue vers l’URL : http://monsite.fr/rssfeed.axd, notre flux rss s’affiche correctement.
Il est possible ensuite d’apporter des améliorations à notre flux RSS. Par exemple, la possibilité à l’utilisateur de choisir le format (RSS 2.0 ou Atom 1.0) de son flux.
Pour cela, nous allons prendre en compte la valeur d’un paramètre passé dans l’URL afin de choisir le formattage du flux :
http://monsite.fr/rssfeed.axd?format=rss ou http://monsite.fr/rssfeed.axd?format=atom
Une petite modification est à faire dans le code de notre classe appelée pour traiter la requête :
if (context.Request.QueryString["format"].Equals("rss"))
{
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
rssFormatter.WriteTo(wr);
}
else if (context.Request.QueryString["format"].Equals("atom"))
{
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
atomFormatter.WriteTo(wr);
}