У меня есть рабочий API с кучей контроллеров, с одной базой данных, указанной в файле конфигурации.Теперь я хочу сделать API мульти базу данных и сделать целевую базу данных частью URL.
Я использую атрибуты на контроллерах и маршрутизации по умолчанию.
Startup.cs:
app.UseMVC();
FolderController.cs:
[Route("api/[controller]")]
[ApiController]
public class FoldersController : ControllerBase { ...
и действие на контроллере:
[HttpGet("{Parent:Guid}", Name = "Get")]
public IActionResult Get(Guid Parent) {...
Так что это даетme - это стандартный общий шаблон, который выглядит следующим образом:
https://api.example.com/api/{controller}/{action}
Я бы хотел, чтобы база данных была частью url, интуитивно понятное место перед контроллером.Я также могу пропустить второй бит api
, так как на этом базовом адресе я больше ничего не запускаю.
https://api.example.com/{database}/{controller}/{action}
Мне удалось извлечь имя базы данных, изменив атрибут контроллера на:
[Route("{database}/[controller]")]
Но тогда мне пришлось бы вставлять код в каждый метод действия, чтобы проверитьдля маршрута и т. д. с риском нереализованной реализации (кроме дополнительной типизации).
В идеале я хотел бы добавить это к маршруту по умолчанию в startup.cs
и добавить службу в промежуточное ПО, котороепроверит привилегии для аутентифицированного пользователя в запрошенной базе данных и продолжит работу в случае необходимости.Таким образом, моя безопасность была бы в одном месте, и я не смог бы забыть об этом в контроллере.
Я не смог понять, как смешать это с атрибутами, они, кажется, конфликтуют друг с другом.
Можно ли это сделать?У кого-нибудь есть какие-нибудь указатели для меня, чтобы выбраться из этого?