Предположим, я хочу разрешить людям создавать плагины для моего приложения ASP.NET Core Web API.
Плагины могут включать конечные точки, используя атрибут маршрутизации:
[Route("[controller]")]
public class SomePlugin: ControllerBase
{
Я могу загрузить эти плагины и добавить AssemblyPart
в Диспетчер деталей в ядре Asp.net, и все будет работать - пока проблем нет.
Однако предположим, что оба плагина случайно используют один и тот же маршрут. Существует вероятность, что они могут случайно конфликтовать друг с другом - один плагин перекрывает маршрут другого. Я не хочу этого.
Итак, мне нужно убедиться, что каждому плагину / сборке назначено свое собственное выделенное пространство URL, в котором его маршруты относительно. В основном это собственный выделенный базовый путь / префикс Url.
Так что в случае вышеупомянутого плагина, хотя разработчик использовал атрибут Route [Route("[controller]")]
- я не хочу, чтобы это был окончательный маршрут. Я хочу сделать это относительно префикса уникальным для этого плагина - поэтому фактический маршрут, который я хочу сгенерировать, будет [Route ("{plugin-prefix} / [controller]")].
Надеемся, что эта политика гарантирует, что плагины не могут конфликтовать друг с другом случайно.
Так что, надеюсь, теперь, когда я объяснил проблему, мой вопрос заключается в том, есть ли подходящий способ / механизм для достижения этого в ядре asp.net прямо сейчас? Я использую ASP.NET Core 3.0 с новым механизмом маршрутизации конечной точки.