Добавил маршрут и изменилось поведение - PullRequest
0 голосов
/ 16 сентября 2011

Я хотел бы оптимизировать внешний вид URL, как показано ниже:

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

Как видите, в URL добавлена ​​переменная OnlyFavorite .Наконец, я нашел причину такого поведения: система маршрутизации стремится сопоставить маршрут с тем, чтобы она повторно использовала значения переменных сегмента из входящего URL-адреса.Лучший способ справиться с этим поведением - это предотвратить его.Настоятельно рекомендуется не полагаться на это поведение и указывать значения для всех переменных сегмента в шаблоне URL.

Это немного раздражает, поскольку у меня много переменных!

Есть решение по этой проблеме?Почему такое поведение не происходит с одним единственным маршрутом (по умолчанию)?

Спасибо

1 Ответ

0 голосов
/ 16 сентября 2011

Похоже, если я регистрирую маршруты, как это, я ухожу от проблемы:

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