Générez un plan du site à la volée
Question
J'essaie de générer un sitemap.xml à la volée pour un site Web asp.net particulier.
J'ai trouvé quelques solutions :
Chinookwebs fonctionne très bien mais semble un peu inactif pour le moment et il est impossible de personnaliser les balises "priority" et "changefreq" de chaque page, elles héritent toutes de la même valeur du fichier de configuration.
Quelles solutions utilisez-vous ?
La solution
Habituellement, vous utiliserez un Gestionnaire HTTP pour ça.Face à une demande de...
... votre gestionnaire répondra avec un plan du site XML formaté.Que ce plan de site soit généré à la volée, à partir d'une base de données ou d'une autre méthode dépend de l'implémentation du gestionnaire HTTP.
Voici à peu près à quoi cela ressemblerait :
void IHttpHandler.ProcessRequest(HttpContext context)
{
//
// Important to return qualified XML (text/xml) for sitemaps
//
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.ContentType = "text/xml";
//
// Create an XML writer
//
XmlTextWriter writer = new XmlTextWriter(context.Response.Output);
writer.WriteStartDocument();
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
//
// Now add entries for individual pages..
//
writer.WriteStartElement("url");
writer.WriteElementString("loc", "http://www.codingthewheel.com");
// use W3 date format..
writer.WriteElementString("lastmod", postDate.ToString("yyyy-MM-dd"));
writer.WriteElementString("changefreq", "daily");
writer.WriteElementString("priority", "1.0");
writer.WriteEndElement();
//
// Close everything out and go home.
//
result.WriteEndElement();
result.WriteEndDocument();
writer.Flush();
}
Ce code peut être amélioré mais c'est l'idée de base.
Autres conseils
Gestionnaire personnalisé pour générer le plan du site.
L'utilisation d'ASP.NET MVC a simplement généré un peu de code à l'aide de la bibliothèque de génération XML .NET, puis l'a transmis à une page d'affichage contenant un contrôle XML.Dans le code-behind, j'ai lié le contrôle avec ViewData.Cela semblait remplacer le comportement par défaut des pages d'affichage pour présenter un en-tête différent.