【问题标题】:asp.net mvc 4 routing hide 'details' actionasp.net mvc 4 路由隐藏“详细信息”操作
【发布时间】:2013-03-13 17:50:56
【问题描述】:

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

  • 我们当前的网址是:/subject/details/9839/MONTAGUT-FRENCH-ROMANTICS
  • 我们想将其更改为:/subject/9839/MONTAGUT-FRENCH-ROMANTICS
  • 但是我们在这个控制器中还有其他操作,我们希望所有其他操作继续显示在 URL 中,例如 /subject/category/1/RESTAURANTS
  • 有没有办法让它工作?

我们的地图路线是:

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

【问题讨论】:

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


    【解决方案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/”开头的url

    【讨论】:

    • 感谢您的帮助,但我们在主题控制器中还有其他操作,我们希望这些操作像往常一样显示在 url 中
    • @leo,您的所有相关操作都在您的主题控制器中吗?
    • 是的,我们在该控制器中还有其他控件,例如类别、列表、索引...
    • 我们希望我们的 url 看起来像 stackourflow 的。我们的大多数控制器都包含一个“详细”操作,我们正在计划隐藏所有这些操作
    • @leo,你似乎想要不兼容的东西。如果你想要一个类似 SO 的行为而不像他们那样指定一个特定的 slug(问题)并且能够灵活地使用所有其他路由,那就太多了。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 2015-07-18
    • 2021-09-14
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多