2010-01-27 6 views
2

내 관리 지역의 경우 특별한 경로를 만들었습니다. 나는이 일을 나의 URL이보다 깨끗해질 수있게 만들었고, 같은 이름을 가진 컨트롤러가 2 개있는 문제를 피했다.내 경로가 작동하지 않습니다. 작동해야합니까?

예 : 응용 프로그램의 관리 사이트에 대한 UserController 및 AdminUserController가 있습니다.

내가 URL의이 같은 원하지 않는 :

http://www.example.com/user/... 
http://www.example.com/admin/adminuser/... 

내가 같이 관리 URL의가보고 싶은 :

이제
http://www.example.com/admin/user/... 

이 URL 구조를 얻기 위해,이 시도 :

내 관리 컨트롤러라는 이름 : AdminUserController

그러면 내 경로는 다음과 같이 보입니다.

routes.Add(new Route("admin/Admin{controller}/{action}/{id}", new MvcRouteHandler()) 
{ 
    Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""}); 
}); 

이 작업을 수행 할 수 있습니까? (현재 경로가 작동하지 않습니다.)

일반 경로 위에이 경로가 있어야합니다.

업데이트 내 모든 관리자 URL은 그래서,/관리자/폴더로 시작해야 할

:

www.example.com/admin/user 
www.example.com/admin/settings 
www.example.com/admin/articles 

및 관리자가 아닌 같은 수 있습니다 :

www.example.com/user 
www.example.com/articles 
+0

mvc 1 또는 2를 사용하고 있습니까? –

+0

이것은 asp.net mvc, http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx의 라우팅 문제를 해결하는 좋은 도구입니다. –

+0

mvc 1.0을 사용하고 있습니다. – mrblah

답변

3

아니요, 작동하지 않습니다.

{controller}에 전달 된 URL 부분에 "컨트롤러"를 추가합니다. 따라서 일 것이다 URL이 있습니다 :

/관리/AdminAdminUser/

이 대신 사용해보십시오.

routes.Add(new Route("admin/user/admin/{action}/{id}", new MvcRouteHandler()) 
{ 
    Defaults = new RouteValueDictionary(new { controller = "AdminUser", action = "index", Id=""}) 
}); 

AdminUser 컨트롤러가 특별한 경우이고/user /로 시작하는 다른 컨트롤러가 없다고 가정합니다. 그렇게했다면 다른 방법은 AdminUserController의 이름을 다시 AdminController로 변경하는 것입니다. 다음 :

routes.Add(new Route("admin/user/{controller}/{action}/{id}", new MvcRouteHandler()) 
{ 
    Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""}), 
    Constraints = new RouteValueDictionary(new { controller = "Admin|Other|Other2"}) 
}); 

여기에서이 특정 경로가 적용되는 컨트롤러를 제한하기 위해 제약 조건을 사용하고 있습니다.

나는 MapRoute 확장 방법을 사용하는 것이 좋습니다. 그들은 훨씬 덜 상세하게 경로 등록을합니다.

+1

www.example을 원합니다. .com/admin/user 및 www.example.com/user가 작동합니다. 하나의 컨트롤러는 AdminUserController 및 UserController입니다. 그게 너도 반응 한거야? becaues 귀하의 두 번째 루트는 admin/user/{controller}입니다 ... 나는 많은 관리자 컨트롤러를 가지고 있으므로 하드 코딩을 원하지 않습니다. 감사! – mrblah

3
routes.Add(new Route("admin/Admin{controller}/{action}/{id}", new MvcRouteHandler()) 
{ 
    Defaults = new RouteValueDictionary(new { controller = "Admin", action = "index", Id=""}); 
}); 

"admin/AdminUser"가 있어야합니다.

routes.MapRoute(
       "Default",            // Route name 
       "admin/{action}/{id}",       // URL with parameters 
      new { controller = "Admin", action = "User", id = "" } // Parameter defaults 
     ); 

당신이 액션 사용자 더 정확하게


무엇을 당신이 찾고있는 것은 영역을 만드는 것입니다와 관리자 컨트롤러가 할 수

http://odetocode.com/Blogs/scott/archive/2009/10/13/asp-net-mvc2-preview-2-areas-and-routes.aspx

(MVC 2를 사용)

은 원하는 것을 제공해야합니다 ...

+0

쓰레기 ... 어이 어스 대답에 대한 muuch ... 나는 공식적으로 마구 잡혔다. ... – MarkKGreenway

+0

이것이 내가 지금 가지고있는 것이 아니다 ?? – mrblah

+0

admin/Admin {controller} 두 명의 관리자가 컨트롤러 이름 – MarkKGreenway

0

1.0 t 이 작업을 수행하는 그가 유일한 방법입니다 :이 작업을 수행하기 위해 1.0 유일한 방법을 사용하여

는 요청 된 컨트롤러를 차단하고 "admin"을 추가합니다 IRouteHandler의 구현을 만들기 개별적으로

routes.MapRoute(
      "AdminUserRoute",      // Route name 
      "admin/user/{action}/{id}",   // URL with parameters 
     new { controller = "AdminUser", action = "Index", id = "" } 
    ); 

    routes.MapRoute(
      "AdminWorkRoute",     // Route name 
      "admin/work/{action}/{id}",   // URL with parameters 
     new { controller = "AdminWork", action = "Index", id = "" }     
    ); 
0

를 사용하여 각 컨트롤러를 매핑하는 것이다 전면

public class AdminRouteHandler : IRouteHandler 
{ 
    private readonly IRouteHandler _mvcHandler = new MvcRouteHandler(); 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     var values = requestContext.RouteData.Values; 
     if(values.ContainsKey("controller")) 
      values["controller"] = "Admin" + values["controller"]; 
     return _mvcHandler.GetHttpHandler(requestContext); 
    } 
} 

그리고에 사용 관리자/는 당신이 직접해야 그 어떤 컨트롤러와 Home을 대체 경로를 등록 할 때. Home을 기본값으로두면 AdminRouteHandler을 지나면 AdminHome으로 매핑됩니다.

routes.Add(new Route("admin/{controller}/{action}/{id}", new AdminRouteHandler()) 
{ 
    Defaults = new RouteValueDictionary(new { controller = "Home", action = "index",  Id=""}); 
}); 
관련 문제