2008-10-20 9 views
36

Jak wygenerować przyjazne adresy URL w ramach ASP.NET MVC? Na przykład, mamy adres URL, który wygląda tak:Jak utworzyć przyjazny adres URL w ASP.NET MVC?

http://site/catalogue/BrowseByStyleLevel/1

1 Id poziomu studiów (wyższy w tym przypadku) do przeglądania, ale I'l jak sformatować URL w taki sam sposób robi to StackOverflow.

Na przykład, te dwa adresy URL zabierze Cię do tego samego miejsca:

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

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

EDIT: Przyjazny część URL jest nazywany ślimak.

+0

Jakie url chcesz zobaczyć w końcu to jeden /Katalog/BrowseByStyleLevel/1/Higher? lub/catalog/BrowseByStyleLevel/Higher? – liggett78

+0

Idealnie drugi, ale potrzebuję Id, aby zapisać wyszukiwanie na podstawie tekstu za każdym razem. – Kieron

+0

Zobacz http://stackoverflow.com/a/20662188/1298685 dla rozwiązania 'ASP.NET MVC 5'. –

Odpowiedz

47

Istnieją dwa kroki, aby rozwiązać ten problem. Najpierw należy utworzyć nową trasę lub zmienić domyślną trasę, aby zaakceptować dodatkowy parametr:

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

Teraz można wpisać cokolwiek chcesz w końcu URI, a aplikacja będzie go zignorować.

Podczas renderowania linki, trzeba dodać „przyjazne” tekst:

<%= Html.ActionLink("Link text", "ActionName", "ControllerName", 
        new { id = 1234, ignoreThisBit="friendly-text-here" }); 
+1

Witam, jeśli spróbuję tego, adres URL generowany przez Html.ActionLink wygląda następująco: /Katalog/BrowseBySubject/3?subject = chemia zamiast /Katalog/BrowseBySubject/3/chemia pomysłów - Dodałem trasę poniżej „default” trasy i zmienił nazwę na „BrowseBySubject” – Kieron

+6

Oznacza to, że nie jest znalezienie. właściwa trasa: Przenieś trasę powyżej domyślnej (która będzie ukrywać domyślną, jeśli nic innego ich nie rozróżnia, np. ograniczenie). Użyj ograniczenia, aby znaleźć tę nową trasę tylko wtedy, gdy jest taka potrzeba (np. w katalogu/BrowseBySubject lub cokolwiek innego –

+0

+1 za miłą, zwięzłą odpowiedź: –

1

masz trasę na global.asax

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

można zdefiniować własną trasą jak:

kontroler jest klasą cs wewnątrz folderu kontrolerów.

możesz zdefiniować swój identyfikator - z wybraną nazwą.

system przekaże wartość do metody actionResult.

można przeczytać więcej na temat tego kroku tutaj: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1

To jak ja wdrożyły URL ślimak na mojej aplikacji. Uwaga: Domyślny MapRoute nie powinien być zmieniany, a także trasy są przetwarzane w kolejności, w jakiej zostały dodane do listy tras.

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="" }); 
+0

Dzięki za tę notatkę, porządek dopasowywania szlaków naprawdę ma znaczenie, jak w większości frameworków. – Dr1Ku

Powiązane problemy