Добавить папку ко всем URL на сайте ASP.net MVC 5 - PullRequest
0 голосов
/ 27 мая 2019

У меня есть сайт MVC 5 с такой структурой:

example.com
example.com/area1 (index for whole section)
example.com/area2/item5 (specific item for section)

По причинам SEO, я хотел бы изменить каждый URL на это:

example.com/keyword (redirected from example.com)
example.com/keyword/area1
example.com/keyword/area2/item5

Ключевое слово является фиксированным и всегда одинаковым, хотя в какой-то момент в будущем может появиться сайт с такой же структурой, но с другим содержанием с другим ключевым словом. Хотя, вероятно, по крайней мере на несколько месяцев.

Какой самый быстрый / простой способ реализовать вышеизложенное. Возможность получить название ключевого слова была бы преимуществом позже, хотя сейчас это не обязательно.

Я мог бы использовать атрибутную маршрутизацию, хотя для этого мне пришлось бы обновить МНОЖЕСТВО ActionMethods - и в настоящее время большинство даже не использует маршрутизацию атрибутов.

ТНХ.

Обновление

Я пытался добавить нижеприведенное ниже в RouteConfig.cs, но по какой-то причине не работал с URL:

routes.MapRoute(
    name: "Default",
    url: "keyword/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

1 Ответ

0 голосов
/ 28 мая 2019
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    string  keyword = "keyword";
    // keyword route - it will be used as a route of the first priority 
    routes.MapRoute(
        name: "Defaultkeyword",
        url: "{keyword}/{controller}/{action}/{id}",
        defaults: new
        {
            controller = "Home",
            action = "Index",
            id = UrlParameter.Optional,
            keyword = keyword
        });

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

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

public override void RegisterArea(AreaRegistrationContext context)
 {
     context.MapRoute(
            "Area1_defaultKeyword",
            "{Keyword}/Area1/{controller}/{action}/{id}",
            new { Keyword = "Keyword", controller = "HomeArea1", action = "Index", id = UrlParameter.Optional }
            );

 context.MapRoute(
            "Area1_default",
            "Area1/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
           );
 }
...