添加了路由并更改了行为

时间:2011-09-16 12:48:19

标签: asp.net-mvc asp.net-mvc-routing

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

http://localhost:3817/Affaire/SearchAffaires?OnlyFavorite=True

所以我添加了一条新路线:

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

现在,URL更易于阅读:

http://localhost:3817/Affaire/SearchAffaires/OnlyFavorite

但是出现了一个新问题:我的页面上的其他链接因路由而发生了变化!

此处示例:... / Affaire / SearchAffaires?LabelName = Baxter& OnlyLabel = True& OnlyFavorite = True

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

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

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

有关该问题的任何解决方案?为什么这种行为不会发生在一条路线上(默认路线)?

由于

1 个答案:

答案 0 :(得分:0)

看起来如果我注册这样的路线,我就摆脱了问题:

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
        );