asp.net mvc 4路由隐藏'详细信息'操作

时间:2013-03-13 17:50:57

标签: asp.net asp.net-mvc asp.net-mvc-4

我正在尝试将网址重写为仅隐藏我们的详细操作。

  • 我们目前的网址是: / subject / details / 9839 / MONTAGUT-FRENCH-ROMANTICS
  • 我们想将其更改为: / subject / 9839 / MONTAGUT-FRENCH-ROMANTICS
  • 但我们仍然在此控制器中有其他操作,我们希望所有其他人的操作继续显示在网址中 / subject / category / 1 / RESTAURANTS
  • 无论如何
  • 还能让它发挥作用吗?

我们的mapRoute是:

routes.MapRoute(
            name: "SubejctDetails",
            url: "{controller}/{action}/{id}/{title}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );

1 个答案:

答案 0 :(得分:1)

尝试这条路线:

routes.MapRoute(
            name: "SubjectDetails",
            url: "{controller}/{id}/{title}",
            defaults: new { controller = "Home", action = "details", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );

它应该完成你想要的(将它置于“默认”路线之上)。

我担心路线引擎永远无法分辨出你想要更经典的/controller/action路线。

为避免混淆路线,请考虑使用不同的范例:使用固定名称控制器或领先的slug。那么任何不包括领先slug的路线都将被忽略:

routes.MapRoute(
            name: "SubjectDetails",
            url: "subject/{id}/{title}",
            defaults: new { controller = "subject", action = "details", id = UrlParameter.Optional, title = "" },
            namespaces: new string[] { "website.Controllers" }
        );

现在该路线仅适用于以“subject /”

开头的网址