Что такое значения Ambient Route в ASP.NET MVC и как это работает? - PullRequest
4 голосов
/ 04 февраля 2012

Я новичок в ASP.NET MVC.Я прочитал Professional ASP.NET MVC 3 , и на двух страницах рассказывается о значениях окружающего маршрута, но я не понимаю, как это работает.Я ищу "asp.net mvc ambient route values" в Google и все еще не нахожу статей или веб-сайтов, которые объясняют, что это такое и как это работает.

Я хочу знать, что такое "Ambient Route Values" в ASP.NET MVC?Как это работает?

Ответы [ 2 ]

8 голосов
/ 06 февраля 2012

Окружающие значения маршрута относятся ко всем тем значениям, которые не нужны для текущей обработки исходящего маршрута.

Давайте объясним на примере

Возьмем, к примеру, это определение маршрута:

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

Сценарий значений окружающего маршрута в этом случае будет:

  1. Пользователь осуществляет администрирование, поэтому в данный момент он использует URL-адрес, обслуживаемый первым определением маршрута:

    /users/change/apply/45
    
  2. Он редактирует некоторую форму по этому URL и отправляет данные обратно.

  3. Когда он попадает на сервер (выполняет некоторое действие контроллера), все эти значения маршрута заполняются и теперь являются частью значений маршрута контекста.
  4. Контроллер делает то, что должен, и в конце мы хотим, чтобы он перенаправил на не-администраторскую часть приложения, таким образом, нажимая второй По умолчанию маршрут.

Теперь, если мы посмотрим на генерацию URL в # 4. Что происходит?

  1. значения маршрута, которые определены во время запроса:
    • controller = "Администрация"
    • action = "Apply"
    • securityArea = "Пользователи"
    • Разрешение = "Изменить"
    • id = 45
  2. Только первые два необходимы для генерации URL второго По умолчанию route
  3. Что происходит с остальными ambient значениями маршрута?
  4. Они также добавляются в URL:

    /Home/Index/?securityArea=Users&permission=Change
    

    И мы этого не хотим.

Вот почему они называются ambient , потому что они просто * остаются там осиротевшими в запросе. Это мое объяснение значений окружающего маршрута. Надеюсь, объяснил в понятной форме.

Я также писал об удалении этих значений окружения в одной своих публикаций в блоге , где я предоставил собственный класс маршрута, который выполняет это удаление.

Как указано на стр. 232

Значения окружающего маршрута в книге, которую вы связали, также относятся к обработке исходящего маршрута, но в нем говорится о значениях окружения, которые мы не должны предоставлять для обработки исходящего маршрута, поскольку они будут взяты из текущих значений (а именно * 1072). * контроллер и действие также могут быть значениями окружающей среды).

Книга, однако, не говорит о проблеме со значениями окружающего маршрута, которые я обрисовал в своем верхнем ответе. Все определенные значения маршрута могут быть окружающими, и они могут вызвать проблемы, когда мы не понимаем, как работает маршрутизация.

0 голосов
/ 04 февраля 2012

Созданный URL-адрес не обязательно должен содержать параметры контроллера или действия текущего запроса.Параметр страницы, указанный в примере, соответствует как один из параметров в RouteData, а контроллер и действие, поскольку они не были предоставлены, остаются такими же, как и в текущем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...