2008-10-20 6 views
36

ASP.NET MVC 프레임 워크 내에서 친숙한 URL을 생성하려면 어떻게해야합니까? 예를 들어, 우리는 다음과 같습니다 URL을 가지고 :ASP.NET MVC에서 친숙한 URL을 만들려면 어떻게해야합니까?

http://site/catalogue/BrowseByStyleLevel/1

1 탐색하기 (이 경우 높은) 연구 수준의 아이디이지만, 같은에서 URL을 포맷 I'l 좋아 방법 StackOverflow 않습니다.

예를 들어,이 두 URL은 같은 장소로 이동합니다 :

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

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

편집 : URL의 쉬운 부분이라 a 슬러그.

컨트롤러는 컨트롤러 폴더 안에 CS 클래스는 다음과 같습니다

+0

URL의 어떤 종류의 당신이 결국보고 싶어,이 /카탈로그/BrowseByStyleLevel/1/이상? 또는/catalog/BrowseByStyleLevel/Higher? – liggett78

+0

이상적으로는 두 번째지만, 나는 이드가 매번 텍스트를 기반으로 찾는 것을 저축해야한다. – Kieron

+0

'ASP.NET MVC 5' 솔루션은 http://stackoverflow.com/a/20662188/1298685를 참조하십시오. –

답변

47

이 문제를 해결하기 위해 두 단계가 있습니다. 첫째, 새로운 경로를 만들거나 추가 매개 변수를 허용하도록 기본 경로를 변경합니다

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

안녕하세요, 이것을 시도하면 Html.ActionLink에서 생성 된 URL이 다음과 같이 표시됩니다. /Catalog/BrowseBySubject/3?대상 = 화학 대신 /카탈로그/BrowseBySubject/3/화학 어떤 아이디어 - 나는 " '기본'경로 아래의 경로를 추가하고, BrowseBySubject '로 이름을 변경 한 – Kieron

+6

이 찾는 아니에요 의미합니다. 경로를 기본값보다 위로 이동하십시오 (구속 조건과 같이 구별 할 수없는 경우 기본값이 숨겨 짐). 제약 조건을 사용하여 필요한 경우에만 새 경로를 찾을 수 있습니다 (예 : Catalog/BrowseBySubject 등). 규칙은) –

+0

좋은 간결한 대답은 +1 –

1

당신처럼 당신이 당신의 자신의 경로를 정의 할 수 있습니다 Global.asax에

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

에 경로를 가지고있다.

당신은 당신이 선택한 이름으로 당신의 ID를 정의 할 수 있습니다.

시스템이 actionResult 메소드에 값을 전달합니다.

여기에이 단계에 대한 자세한 내용을보실 수 있습니다 : http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1

이것은 내가 내 응용 프로그램에 슬러그 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="" }); 
+0

그 주셔서 감사합니다. 대부분의 프레임 워크에서와 같이 라우트 매칭 순서가 정말로 중요합니다. – Dr1Ku