Как часто бывает, у меня есть хорошее решение одной проблемы, которая, к сожалению, вызывает другую.
У нас есть приложение, которое предоставляет услуги членам различных организаций, которые являются частью более крупного родителя. Организации требуют пользовательских URL-адресов. Таким образом, члены организации A получают доступ к URL https://server/vdir/OrgA
, а члены организации B получают доступ к URL https://server/vdir/OrgB
.
Оба из них будут отображаться на одну и ту же область, контроллер и действие в приложении, хотя они могут выглядеть по-разному для конечного пользователя из-за некоторого пользовательского содержимого просмотра.
Поскольку список организаций, использующих это приложение, является динамическим, и поскольку не все организации начнут использовать его одновременно, я начал программно настраивать сопоставление маршрутов. В целевой области я переопределяю метод RegisterArea, извлекаю активные организации из базы данных и выполняю собственный вызов context.MapRoute для каждого.
Делая это таким образом, можно избежать другой проблемы, заключающейся в том, что URL-адреса, в которых есть путь к организации (OrgA), выглядят точно так же, как и те, у которых есть значимое имя области, которое фактически сопоставляется с областью. Обработка путей к сайтам организации как имен виртуальных областей и явное сопоставление их с целевой областью позволяет избежать определенных неправильных указаний.
И это работает, приятно. Но: все это выполняется в Application_Start. Если мы добавим организацию, она не станет активной до тех пор, пока мы не перезапустим приложение, что будет очень вредным для любого, кто использовал его в то время.
Итак, у меня два вопроса:
- Есть ли лучший подход, чем мой, для этого? Я исследовал проблему, но релевантные ключевые слова были настолько вездесущи, что это было похоже на ситуацию с иголкой и стогом сена.
- Если его нет, есть ли способ обновить сопоставления маршрутов без перезапуска приложения?