mvc4 как перенаправить маршрут на новую версию в конфиге маршрута

У меня изначально был этот maproute в моем RouteConfig

            routes.MapRoute(
        name: "thread",              
        url: "{Areamix}/{urltitle}/{id}/thread",
        defaults: new {controller = "thread", action = "view"
        });

Маршруты с этим были слишком длинными, поэтому я сокращаю это до

            routes.MapRoute(
        name: "thread",              
        url: "{urltitle}/{Areamix}-{id}",
        defaults: new
        {
            controller = "thread",
            action = "view"
        });

Как вы уже знаете, старые веб-страницы теперь возвращают ошибку 404, так как URL-адрес маршрутизации изменился, как я могу получить перенаправление старых проиндексированных страниц или перманентное перенаправление на новый MapRoute? Все они имеют общие черты, такие как {id}, любые предложения были бы очень благодарны.

1 ответ

Оставьте старый MapRoute как есть, но сопоставьте его с новым контроллером (действие сейчас Redirect вместо view:

    routes.MapRoute(
      name: "thread",              
      url: "{Areamix}/{urltitle}/{id}/thread",
      defaults: new {controller = "thread", action = "Redirect" // Action is now Redirect (instead of view)
    });

Затем создайте новое действие в вашем контроллере:

public ActionResult Redirect()
{
    // Now rebuild your url in new format:
    var link = RouteData.Values["urltitle"] + RouteData.Values["Areamix"] + "-" + RouteData.Values["id"];
    return RedirectPermanent(link);
}

Теперь все запросы, соответствующие старому maproute, переходят в действие Redirect Action и затем форматируются в новый формат maproute.

Я не проверял это, но это должно работать так.

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