2013-11-22 11 views
0

Я только маршрут по умолчанию включен:ASP.NET MVC маршрут

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

Какой будет resove пути, как: имя хоста/Home/Index, имя хоста/Home/Foo, имя хоста/Home/бар/23 очень хорошо.
Но я должен также включить маршрут, как это: имя хоста/{идентификатор}, который должен указать на:
Контроллер: Главной
Действие: Index
{идентификатор}: параметра Index действия «Идентификатор»

Возможна ли такая маршрута?

ответ

1

Не Испытан: Создать свой маршрут как этого

routes.MapRoute(
     name: "custom", 
     url: "{controller}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

под маршрутом по умолчанию

+0

Это просто убил все мои AJAX звонки :) – dakt

+0

что URL у г запрос в AJAX? –

+0

У меня их пара:/Главная/Регистрация/{param},/Главная/Вход/{param} и т. Д. – dakt

1

Если id этого числа, которое вы можете добавить маршрут выше другой и определить регулярное выражение ограничения:

routes.MapRoute(
    name: "IdOnlyRoute", 
    url: "{id}", 
    defaults: new { controller = "Home", action = "Index" }, 
    constraints: new { id = "^[0-9]+$" } 
); 
+0

Нет, это строка :) – dakt

+0

Если это строка с определенными ограничениями, вы все равно можете использовать решение выше ... если это просто строка, как и все остальное, тогда вам может быть не повезло. – Tallmaris

0

Поскольку у меня короткое время, я настроил маршрут для r каждое действие. К счастью, их мало. :)

 routes.MapRoute(
      name: "IndexWithParam", 
      url: "{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "IndexWithOutParam", 
      url: "", 
      defaults: new { controller = "Home", action = "Index" } 
     ); 

     routes.MapRoute(
      name: "Login", 
      url: "Home/Login", 
      defaults: new { controller = "Home", action = "Login" } 
     ); 

Так что последний маршрут был повторен навсегда другим действием. Не уверен, что это можно сделать лучше, но это работает.

0

Вы пытались поиграть с пакетом AttributeRouting?

Тогда ваш код будет выглядеть следующим образом

[GET("/{id}", IsAbsoluteUrl = true)] 
    public ActionResult Index(string id) { /* ... */ } 
Смежные вопросы