默认路由到索引以外的其他操作
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 中为控制器设置默认操作(而不是索引)
React-Router 4默认路由内容显示在所有其他组件上[重复]