Создавайте карту сайта на лету

Я пытаюсь на лету сгенерировать sitemap.xml для определенного веб-сайта asp.net.

Я нашел пару решений:

  1. подбородок
  2. цервопроект
  3. ньютонинг

Chinookwebs работает отлично, но сейчас кажется немного неактивным, и невозможно персонализировать теги «priority» и «changefreq» для каждой страницы, все они наследуют одно и то же значение из файла конфигурации.

Какие решения вы, ребята, используете?

Вот еще одна статья, в которой представлен код для этого: blackbeltcoder.com/Articles/asp/dynamic-sitemaps-in-asp-net

Jonathan Wood 08.01.2011 05:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
3 038
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Пользовательский обработчик для создания карты сайта.

Обработчик позаботится о каждом http-запросе к приложению и на лету восстановит sitemap.xml, вы это имеете в виду?

jdecuyper 13.08.2008 07:52

Использование ASP.NET MVC просто быстро набрало небольшой фрагмент кода с помощью библиотеки генерации XML .NET, а затем просто передало его на страницу просмотра, на которой был элемент управления XML. В коде программной части я привязал элемент управления к ViewData. Похоже, что это переопределило поведение страниц просмотра по умолчанию, чтобы представить другой заголовок.

Ответ принят как подходящий

Обычно для этого вы используете Обработчик HTTP. Учитывая запрос на ...

http://www.yoursite.com/sitemap.axd

... ваш обработчик ответит картой сайта в формате 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();
}

Этот код можно улучшить, но это основная идея.

Другие вопросы по теме