Sto provando a creare una sitemap automatica ActionResult che restituisce un file sitemap.xml valido. L'effettiva generazione del file non è un problema, ma non riesco a capire come popolare l'elenco di URL nel sistema. Qui è il codice che ho finora:Sitemap dinamica in ASP.NET MVC
public ContentResult Sitemap()
{
XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XElement root = new XElement(xmlns + "urlset");
//some kind of foreach here to get the loc variable for all URLs in the site
//for each URL in the collection, add it to the root element as here
//root.Add(
// new XElement("url",
// new XElement("loc", "http://google.com"),
// new XElement("changefreq", "daily")));
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter writer = new StreamWriter(ms, Encoding.UTF8))
{
root.Save(writer);
}
return Content(Encoding.UTF8.GetString(ms.ToArray()), "text/xml", Encoding.UTF8);
}
}
Per esempio, supponiamo di avere due controller e ciascun controller ha due azioni ad essi associati:
HelpController
- Modifica
- Crea
AboutController
- impresa
- gestione
io non riesco a capire come ottenere un elenco di URL del tipo:
- http://localhost/help/edit
- http://localhost/help/create
- http://localhost/about/company
- http://localhost/about/management
Recentemente, come risposta da @ eduncan911, la soluzione migliore è utilizzare http://mvcsitemap.codeplex.com/ progetto attivo e aggiornato, supporto per il trimming di sicurezza e generare sitemap.xml. Inoltre, può comprimere automaticamente la Sitemap se l'agente lo supporta e dividere la sitemap in sub-sitemaps se il sito è troppo grande perché lo standard sitemap.xml ha il limite solo per i nodi 50k. – CallMeLaNN
Grazie CallMeLaNN. Recentemente ho aggiornato la risposta per elencare quei punti e altro, oltre a elencare il sito in cui è stato spostato. – eduncan911