Перенаправление C # mvc3 sitemap.xml на действие контроллера

#c# #asp.net-mvc-3 #url-rewriting

#c# #asp.net-mvc-3 #url-переписывание

Вопрос:

Я хочу перенаправлять каждый вызов на веб-сайте, созданном для www.domain.com/sitemap.xml на действие контроллера. Как я могу этого добиться?

Пока у меня есть это, но возвращаемый код состояния равен 302. Я хочу вернуть статус 200 с его помощью, но все равно перенаправлять / перезаписывать действие контроллера. Причина, по которой я спрашиваю, заключается в том, что я хочу, чтобы каждый вызов для указанного URL перенаправлялся на controlleraction. Контроллер выполняет некоторые действия и генерирует XML-карту сайта. Затем необходимо вернуть выходные данные этого controlleraction.

 protected void Application_BeginRequest()
{
    //Check if an call for the sitemap.xml has been made
    if (Request.Path == "/sitemap.xml")
    {
        Response.RedirectToRoute("XmlSitemap");
    }
}
  

Ответ №1:

Для достижения этой цели вы можете использовать функцию маршрутизации MVC:

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

После размещения этого в вашем глобальном файле.asax все запросы к domain.com/sitemap.xml будет перенаправлено на действие Sitemap домашнего контроллера.

Комментарии:

1. Глупый я, маршрутизация уже может перехватить URL и перенаправить его на нужный контроллер. Таким образом создавал ненужные трудности для себя. Спасибо!

2. Случается со всеми в той или иной форме. 🙂

3. Но во второй раз, сгенерированный sitemap.xml. Как я могу принудительно воссоздать новую карту сайта?