没有(或默认)操作名称的 MVC 路由

MVC Routing with no (or a default) action name

使用 MVC 5,我试图通过路由获得一些友好的 controller/action 名称。用这个把我的头撞在墙上。

鉴于此控制器:

MyController
    Index(startPage, pageSize)
    EditAction(itemId)

我正在使用两条路线(在继承的 AreaRegistration class 下定义)

context.MapRoute(
            "MyControllerRoute",
            "myArea/MyController/{action}/{itemId}",
            new
            {
                controller = "MyController",
                action = "Index",
                itemId = UrlParameter.Optional
            },
            new[] {"MySite.Areas.MyArea.Controllers"});

context.MapRoute(
            "MyControllerRoutePaged",
            "myArea/MyController/{action}/{startPage}/{pageSize}",
            new
            {
                controller = "MyController",
                action = "Index",
                pageSize = UrlParameter.Optional,
                startPage = UrlParameter.Optional
            },
              new[] {"MySite.Areas.MyArea.Controllers"});

我想获得这些链接:

mysite.com/MyArea/MyController/startPage/pageSize
mysite.com/MyArea/MyController/EditAction/itemId

mysite.com/MyArea/MyController2/ (this being the Index action for a given controller)
mysite.com/MyArea/MyController3/ (this being the Index action for another controller)


mysite.com/MyArea/MyController/ (mysite.com/MyArea/MyController/0/20 would also work if paging existis on the controller)
mysite.com/MyArea/MyController/5/20
mysite.com/MyArea/MyController/EditAction/5

分页链接显示在默认索引页上。不在任何 "action pages" 上。特别是我想隐藏索引操作名称,所以我不会以这样的链接结束:

mysite.com/MyArea/MyController/MyController/.../

如果我在路线中删除 {action} 占位符但路线最终发生冲突,我可以实现此目的。我尝试过使用 ActionLink 和 RouteLink(定义路线名称),但总有一条路线首先匹配并中断下一条路线。如果我改变路线的顺序,这仍然会发生,但相反。

我正在使用路由调试器,我可以看到哪里出了问题,但我一直在兜圈子,试图让它工作。

有什么想法吗?谢谢

我认为您应该使用 Attribute Routing 自定义路由。