【问题标题】:Possible to create catch all route for a controller?可以为控制器创建捕获所有路由吗?
【发布时间】:2015-07-04 09:03:07
【问题描述】:

对于特定的控制器,是否可以将任何不存在的操作路由到索引?

例如,如果我有

fashionController/
fashionController/shoes/
fashionController/bags/
fashionController/otherStuff/

我希望能够只设置索引视图和操作,而其他任何东西都会自动使用索引,而不必为其他任何东西创建单独的视图/操作。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    是的。

    不要求控制器或操作名称是 URL 的一部分。例如,您可以使用以下路由将所有“时尚/*”路由到相同的操作。

    routes.MapRoute(
                "AllToIndex",
                "fashion/{argument1}",
                new { controller = "fashion", action = "Index", argument1 = "" }
            );
    

    请注意,路由匹配是按添加顺序进行的,因此如果您在默认"{controller}/{action}" 之后注册此路由,它将永远不会匹配。一般来说,更具体的路线应该在更通用的一次之前进行,最后一次应该是可选的"cath'em all""{*path}" 数学。

    【讨论】:

    • 我认为您的意思是 "{*path}" 用于包罗万象的路线。
    • @Eilon 确实如此。感谢您指出。还添加了更详细描述问题的链接。
    • 好的哇,效果很好,但是可以混合使用吗,所以如果控制器的动作/视图存在,它将去那里,否则它将默认为通用索引?
    • @PmbDenton 我个人会明确指定我想要发送到操作的路线(单独或限制单个路线)。可能还有其他方法可以做到这一点 - 如果基本匹配停止满足您的需求,则有很多关于 ASP.Net MVC 路由的不同问题/文章。 IE。对于此类问题,SO上有特定的标签-stackoverflow.com/questions/tagged/asp.net-mvc-routing
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多