asp.net шаблон MVC маршрутизацииASP.NET MVC параметр маршрутизации
{"some_parameter/{controller}/{action}/{id}"}
Это допустимый формат, если some_parameter
может быть пустым или строка пустая
asp.net шаблон MVC маршрутизацииASP.NET MVC параметр маршрутизации
{"some_parameter/{controller}/{action}/{id}"}
Это допустимый формат, если some_parameter
может быть пустым или строка пустая
Я считаю, что все, что вам нужно, это {some_parameter}/{controller}/{action}/{id}
(обратите внимание на фигурные скобки вокруг «some_parameter»), и в этом случае он не должен быть пустым или пустым, я думаю. Как, по вашему мнению, ваш конечный URL-адрес может выглядеть так, чтобы соответствовать маршруту в случае, если some_parameter
пуст? «Mysite.com//mycontroller/myaction/myid»?
Механизм маршрутизации соответствует шаблонам. Если вы хотите обрабатывать как {some_parameter}/{controller}/{action}/{id}
, так и {controller}/{action}/{id}
, просто определите оба маршрута.
Создание двух таких маршрутов не работает, потому что этот первый параметр не имеет значения по умолчанию. Имел то же решение, но удалил его после того, как вы упомянули об этом. – Craig
да, я думаю, вы правы. Благодарю. – Nario
Я думал то же самое. Он нуждается в регулярном выражении, чтобы соответствовать шаблону, если вы скорей с этим. – Craig
Редактировать
Я просто изменил порядок регистрации маршрута, чтобы он работал:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {
controller = "home",
action = "index",
id = UrlParameter.Optional }
);
routes.MapRoute(
"Default", // Route name
"{some_parameter}/{controller}/{action}/{id}", // URL with parameters
new {
some_parameter = UrlParameter.Optional,
controller = "home",
action = "index",
id = UrlParameter.Optional
}
);
Они должны быть зарегистрированы в этом порядке. Кроме того, для второго маршрута требуется параметр id и some_parameter, иначе он никогда не пострадает из-за маршрута до него. Несмотря на то, что параметры some_parameter и id заданы как необязательные, это никогда не произойдет, потому что маршрут до этого поймал бы его, если он был пуст.
some_parameter не имеет значения по умолчанию. это динамические данные, например, для контроллера «home», но для some_parameter я должен установить пустой. – Nario
Заказ здесь не помогает. У вас может быть 2 URL-адреса, которые должны соответствовать различным маршрутам. Только ограничения могут решить эту проблему (если возможно). –
@ VasilioRuzanni Я так считаю. Ограничение, которое он имеет с этим решением, как я объяснил, это то, что на втором маршруте должен быть установлен некоторый параметр и идентификатор. – Craig
Обновлен порядок маршрутов, чтобы он работал правильно. Он не будет работать, если вы поместите этот маршрут до маршрута по умолчанию. – Craig
@Nario, не могли бы вы дать более полное представление о том, чего вы хотите достичь? Просто любопытно. Потому что это дополнительная полнота, и вам все равно придется иметь дело с ограничениями. –