Как я могу создать удобный URL-адрес в ASP.NET MVC?

Как создать удобные URL-адреса в ASP.NET MVC Framework? Например, у нас есть URL-адрес, который выглядит так:

http://site/catalogue/BrowseByStyleLevel/1

1 - это идентификатор уровня исследования (в данном случае выше) для просмотра, но я бы хотел переформатировать URL-адрес так же, как это делает StackOverflow.

Например, эти два URL-адреса приведут вас в одно и то же место:

https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

https://stackoverflow.com/questions/119323/

EDIT: дружественная часть URL-адреса называется slug.


person Kieron    schedule 20.10.2008    source источник
comment
Какой URL вы хотите видеть в итоге, этот / catalog / BrowseByStyleLevel / 1 / Higher? или / catalog / BrowseByStyleLevel / Higher?   -  person liggett78    schedule 20.10.2008
comment
В идеале второй, но мне нужен Id, чтобы каждый раз искать по тексту.   -  person Kieron    schedule 20.10.2008
comment
См. stackoverflow.com/a/20662188/1298685 для решения ASP.NET MVC 5.   -  person Ian Campbell    schedule 24.12.2013


Ответы (3)


Есть два шага для решения этой проблемы. Сначала создайте новый маршрут или измените маршрут по умолчанию, чтобы принять дополнительный параметр:

routes.MapRoute(  "Default", // Route name
                   "{controller}/{action}/{id}/{ignoreThisBit}", 
                   new { controller = "Home", 
                         action = "Index", 
                         id = "",
                         ignoreThisBit = ""}  // Parameter defaults )

Теперь вы можете ввести все, что хотите, в конце вашего URI, и приложение проигнорирует это.

При рендеринге ссылок вам нужно добавить «дружественный» текст:

<%= Html.ActionLink("Link text", "ActionName", "ControllerName",
                    new { id = 1234, ignoreThisBit="friendly-text-here" });
person Craig Stuntz    schedule 20.10.2008
comment
Привет, если я попробую это сделать, URL-адрес, сгенерированный из Html.ActionLink, будет выглядеть следующим образом: / Catalog / BrowseBySubject / 3? Subject = chemistry вместо / Catalog / BrowseBySubject / 3 / chemistry. Любые идеи - я добавил маршрут под Маршрут по умолчанию и изменил имя на BrowseBySubject. - person Kieron; 20.10.2008
comment
Это означает, что он не находит правильный маршрут. Переместите маршрут выше Default (который скроет значение по умолчанию, если ничто другое не отличает их, например ограничение). Используйте ограничение, чтобы этот новый маршрут находился только при необходимости (например, в Catalog / BrowseBySubject или в другом вашем правиле). - person Craig Stuntz; 20.10.2008
comment
@CraigStuntz, ваш метод кажется простым по сравнению с другими. но будет ли это оптимизировано для SEO? - person Shaiju T; 07.05.2015

Вот как я реализовал URL-адрес ярлыка в своем приложении. Примечание. Maproute по умолчанию не следует изменять, а также маршруты обрабатываются в том порядке, в котором они добавлены в список маршрутов.

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home",
          action = "Index",
          id = UrlParameter.Optional
    } // Parameter defaults
);
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" });
person Hamid Tavakoli    schedule 28.07.2011
comment
Спасибо за это замечание, порядок сопоставления маршрутов действительно имеет значение, как и в большинстве фреймворков. - person Dr1Ku; 17.07.2013

у вас есть маршрут на global.asax

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

вы можете определить свой собственный маршрут, например:

controller - это класс cs внутри папки контроллеров.

вы можете определить свой идентификатор - с именем, которое вы выберете.

система передаст значение вашему методу actionResult.

вы можете узнать больше об этом шаге здесь: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx.

person Moran Helman    schedule 20.10.2008