2012-08-26 3 views
1

동적으로 페이지를 추가하고 싶은 사이트를 만들고 있습니다. 이 때문에 더 간단한 URL을 원합니다.MVC - 기본 컨트롤러

http://www.mysite.com/my-page-url 

오히려보다가 다음과 같은 URL :

http://www.mysite.com/pageController/my-page-url 

MVC의 URL은 다음과 같이 작동하는 경향이 : |url|/|controller|/|action|/|params|

을 내가 것 내가 무엇을 목표로하고하면 다음과 같은 URL입니다 좋아하는 것 : |url|/|params|

위 URL의 경우 params의 값이 컨트롤러의 이름과 같지 않으면 thos를 전달하고 싶습니다. e 매개 변수를 PageContoller.ProcessDynamicPage에 전달합니다.

+0

질문의 내용을 이해하는 데 어려움을 겪고 있습니다. 다시 말하거나 더 간결하게 표현해 주시겠습니까? 또한 이미 일부 작업을 수행 한 경우 해당 작업을 공유하는 것이 바람직합니다. – Candide

+0

수정 된 질문 – rhughes

답변

3

기본 PARAMS이 무엇인지에 따라, 당신은 당신의 매개 변수는 정수 경우이 작업 것 route constraint

routes.MapRoute(
     "Default", 
     "{Param1}", 
     new { controller = "ProcessDynamicPage", action = "YourAction" }, 
     new {Param1= @"\d+" } 
    ); 

를 만들 수 있습니다.

기본 매개 변수가 문자열이거나 무언가이며 정규식을 만들 수 없거나 IRouteConstraint을 구현할 수없는 경우 컨트롤러의 각 컨트롤러에 대해 일치하는 동작을 만드는 것이 가장 좋습니다. 이미 일치를 시도했습니다.

routes.MapRoute(
    "YourController", 
    "YourController\{Param1}", 
    new { controller = "YourController", action = "YourAction" } 
    } 
); 

routes.MapRoute(
    "YourController2", 
    "YourController2\{Param1}", 
    new { controller = "YourController2", action = "YourAction" } 
    } 
); 

routes.MapRoute(
    "Default", 
    "{Param1}", 
    new { controller = "ProcessDynamicPage", action = "YourAction" }   
); 

컨트롤러가 많은 경우 기대하는 것에 대한 제약 조건을 만드는 방법을 실제로 조사해야합니다.

2

MVC의 기본 라우팅 체계 인 http://www.mysite.com/my-page-url을 사용하면 my-page-url 컨트롤러의 인덱스 동작으로 이동합니다. 같은에 기본 컨트롤러와 액션을 설정하려는 경우, 당신은 당신의 Global.asax.cs 그렇게 할 수있는 파일 :

routes.MapRoute(
    "Default",            // Route name 
    "{action}/{pageName}",       // URL with parameters 
    new { controller = "PageContoller", action = "ProcessDynamicPage", pageName = "" } // Parameter defaults 
); 

업데이트

당신은 추가 경로를 지원해야하는 경우 마크 오레 타 (Mark Oreta)가 제안한 접근 방식을 사용하여이를 만들 수 있습니다. 모양은 at Scott Gu's blogthis tutorial입니다.

+0

좋습니다. 나는 내 대답을 추가 할 때 새로운 MVC 접근법에 대해 몰랐다. – DavidHyogo

1

IIS 7에서 처리기 매핑을 살펴 봐야합니다. 특정 확장자를 지정할 수 있습니다 (예 : * .action, 기본 컨트롤러에서 처리 할 수 ​​있습니다. 저는 약간 녹슬었지만 IIS 6에서는 기본적으로 같은 생각이었습니다. .Net 2.0 응용 프로그램의 web.config 파일에서 system.webServer 태그 안에 다음 섹션이 있습니다.

확장명이 .action 인 모든 URL은 기본 컨트롤러 클래스에서 처리합니다. 어색한 구문을 주목하라. 필자는 어셈블리 이름을 포함하여 완전한 클래스 이름을 지정하고 그 뒤에 쉼표와 정규 어셈블리 이름을 지정해야했습니다.

.Net의 최신 버전에 대한 구문이 변경 될 수 있으므로주의해야합니다.

+0

@rhughes이 답변은 MVC의 특수 기능을 다루는 Zaid의보다 구체적인 답변을 고려해 보면 약간 오래된 것일 수 있습니다.하지만 과거에는 나에게 매우 유용했기 때문에 그냥 떠날 것입니다. – DavidHyogo

+0

감사합니다. – rhughes