2009-09-09 4 views
5

은 일반적으로 내 URL은 표준처럼 :ASP.NET MVC에서 내 관리 섹션의 라우팅을 설정하는 방법은 무엇입니까?

지금 내가 설치하려는 www.example.com/controller/action처럼 내 관리 섹션

 
www.example.com/admin/ 
www.example.com/admin/user/list 
www.example.com/admin/content/add 
etc. 

그래서 형식은 다음과 같습니다 www.example.com/admin/controller/action

내가 알아낼 수없는 것 위와 같이 보이도록 경로를 설정하는 방법.

답변

11

경로 정의의 시작 부분에 하드 코딩 된 'admin'섹션을 사용하여 새 경로를 매핑하면됩니다.

는 예를 들어, Global.asax.cs 파일에 RegisterRoutes에 경로에이를 추가하고 있는지가 (다른 경로를 추가하지 않은 가정) 기본 경로 위에 표시합니다

routes.MapRoute(
    "Default",            
    "admin/{controller}/{action}/{id}",      
    new { controller = "Home", action = "Index", id = "" } 
); 

참고 : '관리'를 경로 정의의 시작 부분에 하드 코드 된 부분.

참고 2 : 기본값 이외의 다른 경로를 추가 한 경우 경로가 올바르게 정렬되어 있어야합니다. 여기

는 MVC 라우팅에 대한 Scott Guthrie에서 좋은 블로그 게시물에 대한 링크입니다 : URL Routing

+3

사물을 사용하면 다른 컨트롤러에도'admin /'접두어를 붙이기가 너무 쉽습니다. 귀하의 사이트/관리자/홈을 통해 귀하의 사이트/홈을 방문 할 수도 있습니다. –

6

켈시의 대답은 바로 마크에 있지만 나는 토론에 뭔가를 추가하고 싶었다. 또 다른 옵션은 실제로 "admin"라우트가 전혀없는 대신 실제로 제한된 URL에 액세스하기 위해 관리자 인증 세션이 필요합니다.

이것은 "전통적인"RESTful 응용 프로그램에서 수행되는 경우가 많습니다. 컨트롤러는 조작중인 자원의 유형을 나타내며 조치는 동사이고 id는 해당 자원의 특정 구성원에 대한 고유 한 ID입니다. 대신 갖는 즉

:

/content/list (for normal users) 
/admin/content/add (for admins) 

당신은

/content/list (for everyone) 
/content/add (for admin, but must be authenticated to work) 

정말 당신이 쓸 수 아마도 제외하고 (모든 benifits를 추가하지 않습니다 URL에/관리/추가 할 것이다/admin 아래의 항목에 대해 단 하나의 규칙을 사용하여 보안 논리를 유지함)하지만 더 복잡한 경로와 표준 RESTful을 깨는 것입니다. 표준 관행을 깨는 것은 그 자체로 나쁜 것은 아니지만, 그 이유는 표준에 맞다고 생각해야하며,이를 깨뜨리는 데 특별한 이점이 없다면, 그것들을 고수 할 수도 있습니다.

두 URL 스타일 모두에서 사용자를 인증해야합니다. 그렇지 않으면 누구나 사용할 수 있습니다.

ASP.NET MVC에서는 ActionFilters를 사용하여 사용자 수준에 따라 작업 (또는 전체 컨트롤러)에 대한 액세스를 제한 할 수 있습니다. 이러한 필터로 관리자 전용 작업을 꾸미면 인증 된 관리 사용자 만 실제로 필터를 사용할 수 있습니다.

자세한 내용은 Scott Gu's 블로그 항목 또는 Rob Connery's post을 읽으십시오.

+0

사용자를위한 목록 작업 (모든 것을 볼 수있는 액세스 권한이 없음)과 관리자를위한 목록 작업 (모든 것을 볼 수있는 곳)은 어떻게 처리합니까? 나는 행동 목록 listAdmin 또는 뭔가 어리석은 것을 선호하지 않습니다. 아니면 잘못된 방향으로 가고 있습니다. –

+0

@ MrRogers - 정말 두 사람이 어떻게 다른지에 달려 있습니다. 유일한 차이점과 표시되는 데이터의 양이 다르다면 일반적으로 동일한보기를 유지하면서 컨트롤러가 표시 할 데이터를 지정하게합니다. 두보기가 실제로 다른 경우 (예 : 관리자에 대해 편집/삭제 단추가있는 경우) 조건 스크립트를 사용하여보기 템플리트에서 관리자 상태를 확인할 수 있습니다. ViewData 또는 세션에서 관리자 상태를 설정할 수 있습니다. 하나의 마지막 옵션은 그들을 부분으로 끌어내는 것입니다. 그래서, 당신은 단지 1 view, list.aspx를 가졌지 만, admin 대 regular user는 각각 partials입니다. – Matt

3

MVC 버전 2부터는 '지역'개념을 추가했습니다.이 개념을 사용하면 올바르게 수행 할 수 있습니다 :) 여기 ScottGu's post about MVC 2 Preview입니다.

+0

영역은 MVC2의 멋진 기능이지만,이 특정 사례에서는 여전히 동일한 리소스를 여러 컨트롤러로 분할하고 있습니다. 이제 모든 "컨텐트"논리를 단일 컨트롤러에 모으는 대신,이를 분리했습니다. 이 경우 DRY 규칙을 위반할 확률이 훨씬 높습니다. 의미 론적 불화는 말할 것도 없습니다. – Matt

+0

그 모두는 관리 인터페이스가하는 일에 달려 있습니다. 시스템을 관리하는 백엔드 일 경우 이는 내용과 완전히 다른 것입니다. 그냥 기능을 추가 한 다음 예, 인증으로 제한하는 것이 좋습니다. 하지만 관리자 인터페이스에는 이것이 모두 존재하지 않는다고 나는 생각합니다. – Runeborg

관련 문제