Asp.net mvc 在MVC中是否可以将一条路由映射到一组特定的控制器操作?

Asp.net mvc 在MVC中是否可以将一条路由映射到一组特定的控制器操作?,asp.net-mvc,routes,Asp.net Mvc,Routes,假设我有两组类似的控制器动作: Photos/OriginalList/{filterBy} Photos/PhotoShopList/{filterBy} Photos/OriginalSingle/{id}/{filterBy} Photos/PhotoShopSingle/{id}/{filterBy} 在这两个组中,filterBy是可选的 有没有办法创建可以将类似操作分组在一起的路由,或者我需要为每个操作创建显式路由 我试过类似的方法,但不起作用: routes.MapRoute(

假设我有两组类似的控制器动作:

Photos/OriginalList/{filterBy}
Photos/PhotoShopList/{filterBy}

Photos/OriginalSingle/{id}/{filterBy}
Photos/PhotoShopSingle/{id}/{filterBy}
在这两个组中,filterBy是可选的

有没有办法创建可以将类似操作分组在一起的路由,或者我需要为每个操作创建显式路由

我试过类似的方法,但不起作用:

routes.MapRoute(name: "FilteredPhotoList", url: "Photos/{action=*List}/{filterBy}", defaults: new {
    controller = "Photos",
    action = "OriginalList",
    filterBy = UrlParameter.Optional
}, namespaces: new string[] { "BetterExample" });

routes.MapRoute(name: "FilteredPhotoSingle", url: "Photos/{action=*Single}/{id}/{filterBy}", defaults: new {
    controller = "Photos",
    action = "OriginalSingle",
    filterBy = UrlParameter.Optional
}, namespaces: new string[] { "BetterExample" });

为了更好的可读性和代码整洁性,我会明确定义每个路由。

这些路由不是非常RESTful的。资源不应该表示动词,它们应该表示名词。你应该考虑不同的设计。FWIW,RFC 2518确实定义了可以在应用程序中使用的
移动
复制
HTTP谓词,前提是您的web服务器允许您添加自定义HTTP谓词。这只是一个理论示例来说明我试图达到的目的。如果您交换了
{src}
{dest}
然后它就变得简单了-只需要一个路由定义就可以处理您显示的所有url只需将
{action=*List}
更改为
{action}
-即
url:“Photos/{action}/{filterBy}”
,其他路由眼睛也是如此,因为第一个路由意味着匹配任何url,其中第一个段是
Photos
,并且有0、1或2个附加段。例如,如果
id
是一个
int
,您可以添加一个路由约束(意味着如果第三段不能转换为
int
,它将不匹配,因此使用第二段路由),我只是试图避免在路由配置中维护一长串路由,如果可能的话。看来我所希望的不太可能,所以这可能是最好的方法。