ASP.NET MVC Маршрутизация Querystring против недоумения встроенного значения - PullRequest
0 голосов
/ 08 февраля 2012

Это, наверное, уже спрашивали - если так извините!Я не мог найти это.Я не уверен относительно того, как asp может решить, когда использовать строку запроса и «нормально выглядящие пути» (встроенные значения). Возьмем, к примеру, это:

routes.MapRoute(

    "SomePage",
    "Net/Fix/{value}",
    new { controller = "Net", action = "Index" }
    );

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Я не знаю, как объяснить -Я постараюсь .. Если я ошибаюсь, объясните это

Вопрос 1. Является ли первый аргумент в mapRoute, чтобы мы могли указать, какую маршрутизацию мы хотим использовать при использовании гиперссылок?

Вопрос2. Что делает второй аргумент?Похоже, что второй аргумент дает вам возможность указать, как должна происходить маршрутизация, как показано ниже: «Net / Fix / hello» или указав заполнители в виде {controller} / {action} / {somevar}

Вопрос 3: Я полагаю, если в сценарии вопроса 2 ничего не используется - это указывает, какая маршрутизация по умолчанию должна иметь место?

Вопрос 4. Как ASP.NET определяет, использовать ли строку запроса или внедренное значение ..

Потому что, например, когда я решаю назвать свою страницу

http:/localhost:portno/Net/Fix/hello

Он покорно печатает привет ... но когда я делаю это

http:/localhost:portno/Net/Index/hello

Это не работает .. если я не делаю

http:/localhost:portno/Net/Index?value=hello..

Вопрос в том... почему? !!!

Я надеюсь, что вопросы были ясны .. Я отвечу на ответы (если таковые будут позже).

1 Ответ

1 голос
/ 08 февраля 2012

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

Второй аргумент - это сопоставление с шаблоном.Литеральные значения отображаются в виде четких, а параметризованные значения находятся внутри фигурных скобок.{}.Параметризованные значения предназначены не только для указания местоположения параметра, но и для имени .

Я не уверен, почему вы задали маршрут без какого-либо подходящего шаблона.Существует ли такая перегрузка MapRoute()?

Причина, по которой вы получаете поведение, которое вы делаете с этим URL: http:/localhost:portno/Net/Index?value=hello Это соответствует второй (по умолчанию) маршрут, а не первый.

Однако посмотрите на второй шаблон маршрута:

"{controller}/{action}/{id}"

Контроллер - это первый параметр, действие - второй.Таким образом, с вашим URL этот запрос направляется на контроллер Net, действие Index.То же, что и в первом примере.

Поскольку строка запроса содержит параметр value, он все равно передается методу действия.И так получилось, что ваш метод действия имеет параметр string с именем value, поэтому он работает.

...