Динамически создать карту сайта и направить ее на корневой уровень - PullRequest
1 голос
/ 30 января 2012

Я пытаюсь динамически создать карту сайта для своего сайта, и я не хочу, чтобы она была (я считаю, что это необходимо) расположена на корневом уровне, т.е. 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, и просто перенаправить его в Home / sitemap (или просто обслуживать карту сайта прямо там). Я не уверен, как это сделать, если это возможно, поскольку я никогда не возился с разделом RegisterRoutes.

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

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

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

Ответы [ 2 ]

2 голосов
/ 30 января 2012

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

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

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

1 голос
/ 30 января 2012

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

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

...