将文件夹添加到ASP.net MVC 5站点中的所有URL

时间:2019-05-27 14:10:30

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我有一个具有以下结构的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才能执行此操作-而且目前大多数甚至不使用属性路由。

thx。

更新

我尝试将以下内容添加到RouteConfig.cs中,但是由于某些原因,Url的工作均无效:

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

1 个答案:

答案 0 :(得分:0)

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 }
    );
}

您还需要将此Defaultkeyword路由添加少量更改后添加到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 }
           );
 }