Încerc să generez un sitemap.xml în zbor pentru un anumit site web asp.net.
I found a couple solutions:
Chinookwebs funcționează excelent, dar pare puțin inactiv acum și este imposibil să personalizați etichetele "prioritate" și "changefreq" ale fiecărei pagini, toate acestea moștenind aceeași valoare din fișierul config.
Ce soluții folosiți?
Instrumentul personalizat pentru generarea sitemap-ului.
Folosind ASP.NET, MVC tocmai a bătut un pic rapid de cod folosind biblioteca de generare XML și apoi a trecut-o doar într-o pagină de vizualizare care avea un control XML pe ea. În codul din spate am legat controlul cu ViewData. Acest lucru părea să suprascrie comportamentul implicit al paginilor de vizualizare pentru a prezenta un antet diferit.
Usually you'll use an HTTP Handler for this. Given a request for...
... managerul dvs. va răspunde cu o hartă site XML formatată. Fie că sitemap-ul este generat în zbor, dintr-o bază de date sau altă metodă este până la implementarea HTTP Handler.
Iată ce arăta aproximativ:
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();
}
Acest cod poate fi îmbunătățit, dar asta este ideea de bază.