Asp.net mvc 添加了一条路线,行为发生了变化

Asp.net mvc 添加了一条路线,行为发生了变化,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我想优化URL的外观,如下所示: 因此,我添加了一条新路线: routes.MapRoute( "Search Affaire Only Favorite", // Route name "{controller}/{action}/OnlyFavorite", // URL with parameters new { controller = "Affaire", action = "SearchAffaires", OnlyFa

我想优化URL的外观,如下所示:

因此,我添加了一条新路线:

        routes.MapRoute(
        "Search Affaire Only Favorite", // Route name
        "{controller}/{action}/OnlyFavorite", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults
        );
现在,URL更易于阅读:

但是出现了一个新问题:我页面上的其他链接由于路由而发生了更改

这里的示例:…/Affaire/SearchAffaires?LabelName=Baxter&OnlyLabel=True&OnlyFavorite=True

之前是:…/Affaire/SearchAffaires?LabelName=Baxter&OnlyLabel=True

如您所见,变量OnlyFavorite已添加到URL中。最后,我发现了这种行为的原因:路由系统热衷于与路由进行匹配,以便重用传入URL中的段变量值。处理这种行为的最好方法是防止它发生。强烈建议您 不要依赖于这种行为,并且要为URL模式中的所有段变量提供值

这有点烦人,因为我有很多变量

那个问题有什么解决办法吗?为什么只有一条路由是默认路由时,这种行为不会发生


谢谢

看起来如果我注册了这样的路线,我就不会有问题了:

routes.MapRoute(
    "Search Affaire", // Route name
    "{controller}/{action}", // URL with parameters
    new { controller = "Affaire", action = "SearchAffaires" } // Parameter defaults
    );
routes.MapRoute(
        "Search Affaire Only Favorite", // Route name
        "{controller}/{action}/OnlyFavorite", // URL with parameters
        new { controller = "Affaire", action = "SearchAffaires", OnlyFavorite = true } // Parameter defaults
        );

您没有任何问题,因为路由是按照它们在RouteCollection中出现的顺序应用的。在这种情况下,第二个是永远无法到达的。这不是一个解决方案。这不是真的,因为我已经测试过,localhost/affaire/searchaffaires/onlyfavorite有效。