对于以下情况,我应该在 ASP.net MVC 中使用 4 个单独的路由吗?

Should I be using 4 separate routes in ASP.net MVC for the following scenario?

给出以下 4 url 种可能性:

http://www.domain.com/channels/16/animals-and-pets/views/1
http://www.domain.com/channels/16/animals-and-pets/views
http://www.domain.com/channels/16/animals-and-pets/1
http://www.domain.com/channels/16/animals-and-pets

我应该创建 4 个不同的 MVC 路由还是有更好的方法来处理这些路由?我能以某种方式使用一条路线处理所有这些可能的 url 吗?

这些路线看起来正确吗?

URL: /channels/16/animals-and-pets/views/1

routes.MapRoute(
    name: "ChannelSortsWithPageNum",
    url: "channels/{ChannelID}/{ChannelLink}/{Sort}/{PageNum}",
    defaults: new {
        controller = "Channels",
        action = "Channel",
        ChannelID = "",
        ChannelLink = "",
        Sort = UrlParameter.Optional,
        PageNum = UrlParameter.Optional
    },
    constraints: new { PageNum = @"\d+" }
);

//URL: /channels/16/animals-and-pets/views

routes.MapRoute(
    name: "ChannelSortsWithNOPageNum",
    url: "channels/{ChannelID}/{ChannelLink}/{Sort}",
    defaults: new {
        controller = "Channels",
        action = "Channel",
        ChannelID = "",
        ChannelLink = "",
        Sort = UrlParameter.Optional
    }
);

//URL: /channels/16/animals-and-pets/1

routes.MapRoute(
    name: "ChannelWithPageNum",
    url: "channels/{ChannelID}/{ChannelLink}/{PageNum}",
    defaults: new {
        controller = "Channels",
        action = "Channel",
        ChannelID = "",
        ChannelLink = "",
        PageNum = UrlParameter.Optional
    },
    constraints: new { PageNum = @"\d+" }
);

//URL: /channels/16/animals-and-pets

routes.MapRoute(
    name: "Channel",
    url: "channels/{ChannelID}/{ChannelLink}",
    defaults: new {
        controller = "Channels",
        action = "Channel",
        ChannelID = "",
        ChannelLink = ""
    }
);

我自己想出来的。我决定使用 ASP.NET MVC 5 属性路由而不是 RouteConfig.cs。

在 RouteConfig.cs 中,我使用以下方法启用了属性路由:

routes.MapMvcAttributeRoutes();

然后我在我的控制器上定义路由,如下所示:

[Route("channels/{ChannelID:int}/{ChannelLink:regex(^[a-zA-Z-]+$)}/{Sort:alpha?}/{PageNum:int?}")]
[Route("channels/{ChannelID:int}/{ChannelLink:regex(^[a-zA-Z-]+$)}/{PageNum:int?}")]
public ActionResult Channel(int ChannelID, string ChannelLink, string Sort, int? PageNum)
{
    etc...
}

它现在就像一个魅力。