0

我正在尝试进行 url 重写以仅隐藏我们的详细操作。

  • 我们当前的网址是: /subject/details/9839/MONTAGUT-FRENCH-ROMANTICS
  • 我们想将其更改为:/subject/9839/MONTAGUT-FRENCH-ROMANTICS
  • 但是我们在这个控制器中还有其他操作,我们希望所有其他操作继续显示在 URL 中,例如 /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" }
        );
4

1 回答 1

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

现在该路线将仅适用于以“主题/”开头的网址

于 2013-03-13T17:54:34.497 回答