0

asp.net шаблон MVC маршрутизацииASP.NET MVC параметр маршрутизации

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

Это допустимый формат, если some_parameter может быть пустым или строка пустая

+0

Обновлен порядок маршрутов, чтобы он работал правильно. Он не будет работать, если вы поместите этот маршрут до маршрута по умолчанию. – Craig

+0

@Nario, не могли бы вы дать более полное представление о том, чего вы хотите достичь? Просто любопытно. Потому что это дополнительная полнота, и вам все равно придется иметь дело с ограничениями. –

ответ

3

Я считаю, что все, что вам нужно, это {some_parameter}/{controller}/{action}/{id} (обратите внимание на фигурные скобки вокруг «some_parameter»), и в этом случае он не должен быть пустым или пустым, я думаю. Как, по вашему мнению, ваш конечный URL-адрес может выглядеть так, чтобы соответствовать маршруту в случае, если some_parameter пуст? «Mysite.com//mycontroller/myaction/myid»?

Механизм маршрутизации соответствует шаблонам. Если вы хотите обрабатывать как {some_parameter}/{controller}/{action}/{id}, так и {controller}/{action}/{id}, просто определите оба маршрута.

+0

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

+0

да, я думаю, вы правы. Благодарю. – Nario

+1

Я думал то же самое. Он нуждается в регулярном выражении, чтобы соответствовать шаблону, если вы скорей с этим. – Craig

3

Редактировать

Я просто изменил порядок регистрации маршрута, чтобы он работал:

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 заданы как необязательные, это никогда не произойдет, потому что маршрут до этого поймал бы его, если он был пуст.

+0

some_parameter не имеет значения по умолчанию. это динамические данные, например, для контроллера «home», но для some_parameter я должен установить пустой. – Nario

+0

Заказ здесь не помогает. У вас может быть 2 URL-адреса, которые должны соответствовать различным маршрутам. Только ограничения могут решить эту проблему (если возможно). –

+0

@ VasilioRuzanni Я так считаю. Ограничение, которое он имеет с этим решением, как я объяснил, это то, что на втором маршруте должен быть установлен некоторый параметр и идентификатор. – Craig

Смежные вопросы