默认路由到索引以外的其他操作

Posted

技术标签:

【中文标题】默认路由到索引以外的其他操作【英文标题】:Routing to another action than Index as default 【发布时间】:2019-02-18 00:11:48 【问题描述】:

我已经搜索了很长时间,但是对于这种情况,我没有找到答案。

我有一个HomeController,我的 route.config 中的默认路由如下:

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

所以; http://localhost:36690/Home 自动调用Index

我还有一个带有Index 方法的MyController(它是route.config 中的自定义路由)并且可以只写http://localhost:36690/My 并且它可以工作。

但我想要一个自定义路由没有任何Index

如果我请求localhost:36690/New,它应该调用BASIC

所以我尝试了以下方法:

routes.MapRoute(
    "New",
    "controller/action",
    new  controller = "New", action = "Basic" 
);

但它忽略了我的默认操作“基本”并引发错误:

“/”应用程序中的服务器错误。无法找到该资源。 "

【问题讨论】:

【参考方案1】:

您可以专门为该控制器添加另一个路由。

routes.MapRoute(
    name: "New",
    url: "New/action",
    defaults: new  controller = "New", action = "Basic" 
);

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

这样,当/New 被调用时,它将默认为NewController.Basic

【讨论】:

正如您在我的问题的第二个代码块中看到的那样,我确实做到了。不幸的是,它显示“/”应用程序中的服务器错误。无法找到该资源。说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。请求的 URL:/New " @thestruggleisreal 再仔细看看我回答中的路线。您的第二个代码块与我建议的不同。如果您在两条路由中使用相同的 url 模板 url: "controller/action/id",则会导致路由冲突。还要注意我有路线的顺序,因为这也很重要。需要在更通用的默认路由之前添加更具体/自定义的路由。 我把它放在默认之前并在 url 中尝试了 'New'/action (如果我在问题中提到这一点会更好,抱歉),以及我的 ,New 的 url 模板' 如果这算作 url 模板中的差异,则路由不包含 id。但知道我明白你的意思我的网址:“controller="New"/action”,必须是“New/action”,控制器周围没有大括号,非常感谢。另一个问题:在哪种情况下我需要“'New'/act”?或者它只是一个被接受的IDE弱点。因为那么,Newroute 赢得比赛总是我去 localhost:xx/doesntmatter。在我看来,这是一个错误 @thestruggleisreal 花括号.. 用于模板参数。与 id 用作参数的方式相同,如果您有一个名为 New 的参数,那么您会将其包含在模板中。

以上是关于默认路由到索引以外的其他操作的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework 2 中的路由,跳过 url 中的“索引”操作但获取 id

在 ASP.NET MVC 3 中为控制器设置默认操作(而不是索引)

vue router 多路由及路由嵌套

React-Router 4默认路由内容显示在所有其他组件上[重复]

asp.net mvc 路由:如何使用默认操作但非默认参数?

其他路由而不是默认路由不适用于 XAMPP