Я пытаюсь на лету сгенерировать sitemap.xml для определенного веб-сайта asp.net.
Я нашел пару решений:
Chinookwebs работает отлично, но сейчас кажется немного неактивным, и невозможно персонализировать теги «priority» и «changefreq» для каждой страницы, все они наследуют одно и то же значение из файла конфигурации.
Какие решения вы, ребята, используете?





Пользовательский обработчик для создания карты сайта.
Обработчик позаботится о каждом http-запросе к приложению и на лету восстановит sitemap.xml, вы это имеете в виду?
Использование ASP.NET MVC просто быстро набрало небольшой фрагмент кода с помощью библиотеки генерации XML .NET, а затем просто передало его на страницу просмотра, на которой был элемент управления XML. В коде программной части я привязал элемент управления к ViewData. Похоже, что это переопределило поведение страниц просмотра по умолчанию, чтобы представить другой заголовок.
Обычно для этого вы используете Обработчик HTTP. Учитывая запрос на ...
... ваш обработчик ответит картой сайта в формате XML. Будет ли эта карта сайта генерироваться "на лету", из базы данных или каким-либо другим методом, зависит от реализации обработчика HTTP.
Вот примерно как это будет выглядеть:
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();
}
Этот код можно улучшить, но это основная идея.
Вот еще одна статья, в которой представлен код для этого: blackbeltcoder.com/Articles/asp/dynamic-sitemaps-in-asp-net