2012-01-29 2 views
1

Я пытаюсь динамически создать карту сайта для своего сайта, и я не хочу, чтобы это было (я полагаю, это необходимо), расположенное на корневом уровне, т.е. Domain.com/sitemap.xml До сих пор у меня есть результат действия в домашнем контроллере, как это:Динамически создайте карту сайта и проложите ее до корневого уровня

public ActionResult SiteMap() 
{ 
    ... 
    return this.Content(xml, "text/xml"); 
} 

Это прекрасно работает для создания файла, но он находится в Domain.com/Home/Sitemap и мой понимание заключается в том, что карта сайта должна быть расположена на корневом уровне. Есть ли способ переписать URL-адрес или добавить новый маршрут для него в файл Global.asax? По умолчанию файл Global.asax содержит следующее:

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
      ); 

Так что, похоже, как это может быть место, чтобы добавить что-то вроде проверки, если запрошенный маршрут sitemap.xml и просто перенаправить его на главную/Карта сайта (или просто подайте карту сайта прямо там). Я не уверен, как это сделать, если это возможно, поскольку я никогда не сталкивался с разделом RegisterRoutes.

Другой проблемой, которая может возникнуть, будет расширение .xml, я бы подумал, что IIS подумает, что это файл на диске и игнорировать маршрут вместе.

Я иду по правильному пути или есть лучший способ сделать это? Или это невозможно, и мне нужно просто физически создать файл?

Редактировать (исправить) Мне просто пришло в голову, что я думал об этом неправильно. Все, что мне нужно сделать, это создать или обновить файл Sitemap и сохранить его в /sitemap.xml периодичность или каждый раз, когда страница будет добавлена. Я не могу поверить, что это не было очевидно для меня.

ответ

2

Вы можете добавить маршрут:

routes.MapRoute(
    "sitemap", 
    "sitemap.xml", 
    new { controller = "Home", action = "SiteMap" } 
); 

и убедитесь, что вы положили этот маршрут до вашего маршрута по умолчанию.

1

Это может быть немного не по теме (но на одном дыхании, вроде близко ... я думаю) Посмотрите на MVCSitemapProvider.

Это достаточно просто для использования в проекте, я начал использовать его в последнее время, и он работает как шарм. Я могу добавить некоторые образцы кода, если вы действительно хотите пойти по этому маршруту?

+0

Раньше я просматривал провайдер MVC SiteMap, но я не думал, что он создал карту сайта на корневом уровне. Похоже, вы должны вручную добавить файл Sitemap. Я ошибаюсь? –

+0

Это так, вам просто нужно зарегистрировать контроллер, который он включает в таблицу маршрутов: https://github.com/maartenba/MvcSiteMapProvider/wiki/Exporting-the-sitemap-for-search-engine-indexing –

Смежные вопросы