Как создать дружественный URL в ASP.NET MVC? - PullRequest
39 голосов
/ 20 октября 2008

Как создать дружественные 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/

РЕДАКТИРОВАТЬ: Дружественная часть URL называется слизняк .

Ответы [ 3 ]

51 голосов
/ 20 октября 2008

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

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" });
3 голосов
/ 29 июля 2011

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

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="" });
1 голос
/ 20 октября 2008

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

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

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

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

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

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

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

...