2010-04-23 9 views
0

이 코드를 컴파일하는 예제를 볼 수 있습니까?ASP.NET MVC 경로

public IEnumerable<RouteBase> Routes 
    { 
     get 
     { 
      return new List<Route>() 
      { 
       new Route(...) 
      } 
     } 
    } 

RouteCollection.MapRoute()이없는 경우 어떻게 하시겠습니까?

저는 Global.asax.cs가 아닌 맵핑 경로를 담당 할 관리자를 지정하려고합니다. public IEnumerable<RouteBase> Routes은 내 컨트롤러의 멤버입니다. 컨트롤러가 라우트를 담당하는 경우 routes.MapRoute()에 하드 코드 된 별도의 URL (Global.asax.cs)을 사용하여 라우트를 분리하는 것은 좋지 않습니다.

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     RouteTable.Routes.Include(new RootController()); 
    } 
} 

public static class RouteCollectionExtension 
{ 
    public static RouteCollection Include(this RouteCollection routes, IRoutedController controller) 
    { 
     foreach (var route in controller.Routes) 
     { 
      routes.Add(route); 
     } 

     return routes; 
    } 
} 

그리고 : 하비 씨에 대한 응답으로

public class RootController : Controller, IRoutedController 
{ 
    public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

     return View(); 
    } 

    public IEnumerable<RouteBase> Routes 
    { 
     get 
     { 
      return new List<Route>() 
      { 
       new Route("{controller}/{action}/{id}", ...?!?) 
      }; 
     } 
    } 
} 
+0

닭고기와 계란에 문제가 있습니까? 컨트롤러 메소드는 실행되지 않는 경우 라우트를 설정하는 방법 (라우팅 엔진이 컨트롤러 메소드를 실행하기 때문에 적어도 하나의 기존 라우트가 필요합니다)? 아마도 –

+0

. :) # # – MVCDummy09

+0

편집 내용이 나에게 전달되었는지 여부를 모릅니다. 컨트롤러는 라우트를 담당하지 않으며 라우팅 엔진은 라우트입니다. 나는 당신의 강점에 감탄하지만, 컨트롤러 메소드를 처음부터 어떻게 실행 시킬지 아직 설명하지 않았기 때문에 라우팅 엔진에 사전 정의 된 라우트가없고 실행할 방법이없는 경우 일부 라우트를 설정할 수 있습니다 컨트롤러 메소드. –

답변

2

이 게시물에 나를 깜짝 놀라게 한 라인은 내가 노력하고있어

을 다음되었다 내 컨트롤러를 넣어 매핑 경로 담당

asp.net mvc의 모든 아이디어는 명확한 분리입니다. 컨트롤러가 더 이상 제어 만하는 것이 아니라 라우트에 간섭하기 때문에 컨트롤러의 테스트 가능성이 떨어집니다.