this question과 비슷한 점을 좀 더 향상시키고 싶습니다.ASP.NET 라우팅을 사용하여 트리 구조 URL을 라우팅하는 방법은 무엇입니까?
ASP.NET MVC 웹 응용 프로그램이 있습니다.
나는 엔티티 트리를 가지고 있습니다.
예를 들어, IList<Page>
인 Children이라는 속성이있는 Page
클래스입니다. (Page
클래스의 인스턴스는 데이터베이스의 한 행에 해당합니다.)
사이트 소유자는 언제든지 새 페이지를 추가하거나 기존 페이지를 삭제할 수 있으며 URL에는 이러한 변경 사항도 반영되어야합니다.
데이터베이스의 모든 Page
에 고유 한 URL을 할당하고 싶습니다.
나는 PageController
이라는 컨트롤러로 Page
개체를 처리합니다.
예 URL은 :
http://mysite.com/Page1/
http://mysite.com/Page1/SubPage/
http://mysite.com/Page/ChildPage/GrandChildPage/
당신은 그림을 얻는다.
그래서 모든 단일 Page
개체에 부모 URL과 자체 이름을 더한 자체 URL을 갖게하고 싶습니다.
그 외에도 단일 Page
을 /
(루트) URL로 매핑하는 기능을 원합니다.
나는이 규칙을 적용 할 것 : URL이 다른 경로로 처리하거나, 파일이 지정된 URL에있는 파일 시스템에 존재 할 수있는 경우
- , 기본 URL 매핑이 을 일어나게을
- URL이 가상 경로 공급자에 의해 처리 될 수있는 경우,
PageController
클래스
나는 또한 this question과 also this one과 this one을 찾았지만 첫 두 점에 대한 설명을 제공하지 않았기 때문에별로 도움이되지 않았습니다.
나는 다음과 같은 가능한 soutions를 참조하십시오
- 이 invidually 각 페이지에 대한 경로를지도.
응용 프로그램이 시작될 때 전체 트리로 이동하고 경로 테이블의 끝에 정확히 일치하는 경로를 추가해야합니다. {*path}
으로 경로를 추가하고이를 처리하는 사용자 정의IRouteHandler
을 작성할 수 있지만이 핸들러가 모든 것을 처리 할 수 있기 때문에 처음 두 규칙을 어떻게 처리 할 수 있는지 알 수 없습니다.
지금까지 가장 간단한 해결책이기 때문에 첫 번째 해결 방법이 가장 간단합니다. 하지만 그 경우에도 요청을 처리하기 위해 내가 어떻게 PageController
을 만들 수 있는지 확실하지 않습니다.
정말 고맙게 생각합니다.
미리 감사드립니다.
편집 : 이제 모든 답변의 모든 측면을 검토 할 시간이있었습니다. 나는 Neal의 대답을 받아 들였습니다. 그가 일하는 방식에 대해 가장 잘 설명해주는 사람이기 때문입니다. 나는 또한 좋은 아이디어를 제공하기 때문에 다른 모든 대답을 upvoted.
기존 파일에 대한 경로를 추가하는 이유와 방법은 무엇입니까? 또한, 어떻게 나무의 경로를 만들고 적절한 컨트롤러로 안내 할 수 있습니까? – Venemo
필요하지 않습니다. 기본적으로 라우팅 시스템은 기존 파일을 확인하고 일치하는 컨트롤러 및 작업을 찾으려고 할 때이를 지원합니다. – Paul
@Paul - 감사합니다. 가상 경로 공급자가 제공하는 파일에도이 기능이 적용됩니까? – Venemo