2

자주 발생하는 한 가지 문제에 대한 좋은 해결책이 있습니다. 불행히도 다른 문제가 발생합니다.데이터베이스 항목을 기반으로하는 동적 라우팅

Google은 다양한 조직의 회원, 더 큰 부모의 일부에게 서비스를 제공하는 앱을 보유하고 있습니다. 조직에는 맞춤 URL이 필요합니다. 따라서 org A의 구성원은 URL https://server/vdir/OrgA에 액세스하고 org B의 구성원은 URL https://server/vdir/OrgB에 액세스합니다.

두 가지 모두 사용자 정의보기 내용으로 인해 최종 사용자와 다르게 보일 수 있지만 앱의 영역, 컨트롤러 및 동작이 모두 동일하게 매핑됩니다.

이 앱을 사용하는 조직 목록이 동적이기 때문에 모든 조직에서 동시에 사용하기 시작하지 않으므로 프로그래밍 방식으로 경로 매핑을 설정하기 시작했습니다. 대상 영역에서 RegisterArea 메서드를 재정의하고 활성 조직을 데이터베이스에서 가져와 각각에 대해 사용자 지정 context.MapRoute 호출을 실행합니다.

이 방법을 사용하면 조직 사이트 경로 ("OrgA")가있는 URL이 의미있는 지역 이름을 가진 URL과 정확히 일치하는 URL과 실제로 다른 지역에 매핑되는 URL과 같은 다른 문제를 피할 수 있습니다 . 조직 사이트 경로를 가상 영역 이름으로 처리하고 명시 적으로 대상 영역에 매핑하면 특정 오 류가 방지됩니다.

그리고 멋지게 작동합니다. 그러나 그것은 Application_Start에서 모두 실행됩니다. 조직을 추가하면 앱을 다시 시작하기 전까지는 활성화되지 않습니다. 이는 해당 시점에이 조직을 사용하고있는 사람에게 큰 타격을 줄 수 있습니다.

그래서 내 질문이 있습니다 :

  1. 이 작업을 수행하는 나보다 더 나은 방법이 있습니까? 나는이 문제를 연구했지만 관련 키워드가 매우 보편적이어서 바늘과 건초 더미 상황이었다.
  2. 없는 경우 앱을 다시 시작하지 않고 경로 매핑을 새로 고치는 방법이 있습니까?

답변

2

Phil Haack이 기사 dealing with exactly this problem을 작성했습니다.

정말 짧은 버전은 경로 등록을 Global.asax가 아닌 다른 파일에두고 해당 파일의 내용을 캐시하는 것입니다. 캐시는 파일을 종속성으로 가지고 있으며 경로가 다시 등록되는 캐시가 무효화 (읽기 : 파일이 변경됨) 될 때 메소드를 호출합니다.

+0

필자의 경우 SQL Server 종속성을 기반으로 작업을 수행하려고합니다. 조직의 캐시가 무효화되고 새로 고쳐지면 경로를 다시 등록합니다. 그러나 원리는 같습니다. 기사에 대한 포인터를 주셔서 대단히 감사합니다! –

관련 문제