Окружающие значения маршрута относятся ко всем тем значениям, которые не нужны для текущей обработки исходящего маршрута.
Давайте объясним на примере
Возьмем, к примеру, это определение маршрута:
routes.MapRoute(
"Complex",
"{securityArea}/{permission}/{action}/{id}",
new { controller = "Administration", action = "List", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Сценарий значений окружающего маршрута в этом случае будет:
Пользователь осуществляет администрирование, поэтому в данный момент он использует URL-адрес, обслуживаемый первым определением маршрута:
/users/change/apply/45
Он редактирует некоторую форму по этому URL и отправляет данные обратно.
- Когда он попадает на сервер (выполняет некоторое действие контроллера), все эти значения маршрута заполняются и теперь являются частью значений маршрута контекста.
- Контроллер делает то, что должен, и в конце мы хотим, чтобы он перенаправил на не-администраторскую часть приложения, таким образом, нажимая второй По умолчанию маршрут.
Теперь, если мы посмотрим на генерацию URL в # 4. Что происходит?
- значения маршрута, которые определены во время запроса:
- controller = "Администрация"
- action = "Apply"
- securityArea = "Пользователи"
- Разрешение = "Изменить"
- id = 45
- Только первые два необходимы для генерации URL второго По умолчанию route
- Что происходит с остальными ambient значениями маршрута?
Они также добавляются в URL:
/Home/Index/?securityArea=Users&permission=Change
И мы этого не хотим.
Вот почему они называются ambient , потому что они просто * остаются там осиротевшими в запросе. Это мое объяснение значений окружающего маршрута. Надеюсь, объяснил в понятной форме.
Я также писал об удалении этих значений окружения в одной своих публикаций в блоге , где я предоставил собственный класс маршрута, который выполняет это удаление.
Как указано на стр. 232
Значения окружающего маршрута в книге, которую вы связали, также относятся к обработке исходящего маршрута, но в нем говорится о значениях окружения, которые мы не должны предоставлять для обработки исходящего маршрута, поскольку они будут взяты из текущих значений (а именно * 1072). * контроллер и действие также могут быть значениями окружающей среды).
Книга, однако, не говорит о проблеме со значениями окружающего маршрута, которые я обрисовал в своем верхнем ответе. Все определенные значения маршрута могут быть окружающими, и они могут вызвать проблемы, когда мы не понимаем, как работает маршрутизация.