2015-01-16 2 views
0

보고서 컨트롤러 (ReportsController)가 너무 많아서 분할하기로 결정했습니다. 2 개의 URL 수준을 통해 컨트롤러 분할 및 컨트롤러 라우팅

내가 ReportsController를 사용하기로 결정

응용 프로그램/보고서/설정/

응용 프로그램/보고서/차트/

응용 프로그램/보고서/테이블/: 저는 현재 세 개의 컨트롤러가 제공 페이지가 그냥 설정 페이지에 대한, 그리고 나는 다른 페이지를 처리하는 두 개의 별도의 컨트롤러를 만들었습니다 - Reports__ChartsController & Reports__TablesController.

나는 내 라우팅 설정에 다음과 같은 두 가지 경로 추가 :

routes.Add(
      new Route("reports/charts/{action}/{id}", 
       new RouteValueDictionary(
        new { controller = "Reports__Charts", action = "Index", id = UrlParameter.Optional }), 
       new HyphenatedRouteHandler() 
      ) 
     ); 

routes.Add(
      new Route("reports/tables/{action}/{id}", 
       new RouteValueDictionary(
        new { controller = "Reports__Tables", action = "Index", id = UrlParameter.Optional }), 
       new HyphenatedRouteHandler() 
      ) 
     ); 

접근 방식은 정말 잘 작동을하지만, 더 나은 방법이 있는지 궁금 해서요? 이 접근법의 단점은 다른 컨트롤러를 분리하고 싶다면 각 컨트롤러에 고유 한 내 경로 구성에 항목을 계속 추가해야하므로 유지 관리가 어려운 지점으로 내 라우트 구성을 확장 할 수 있다는 것입니다.

내가 뭘하고 싶었는지 (컨트롤러를 나누는) 공통 요구 사항이지만 Google을 통해 구현하는 표준 방법을 찾지 못했습니다.

답변

1

이 문제는 속성 기반 라우팅이 출시되는 즉시이를 보류하는 이유입니다. 컨트롤러 레벨 속성 [RouteArea] 및 [RoutePrefix]를 사용하는 경우, 작업 당 하나의 경로, 명확하고 간결한 방법 및 컨트롤러간에 동작을 원활하게 처리 할 수 ​​있습니다. 스위치를 빨리 마칠수록 행복해질 것입니다. 우린 한번도 돌아 보지 않았습니다.

+0

우수 감사합니다. 컨벤션 기반 라우팅은 앱의 90 % (기본 라우팅)에 대한 나의 필요에 맞습니다. 그래서 나는 그것을 고수 할 수 있고 동시에 쉬운 라우팅에 맞지 않는 페이지에 대한 속성 기반 라우팅을 사용할 수있어서 기쁩니다 협약 – Rob