Вставьте параметр маршрутизации перед {контроллером} - PullRequest
0 голосов
/ 07 мая 2019

У меня есть рабочий 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 и добавить службу в промежуточное ПО, котороепроверит привилегии для аутентифицированного пользователя в запрошенной базе данных и продолжит работу в случае необходимости.Таким образом, моя безопасность была бы в одном месте, и я не смог бы забыть об этом в контроллере.

Я не смог понять, как смешать это с атрибутами, они, кажется, конфликтуют друг с другом.

Можно ли это сделать?У кого-нибудь есть какие-нибудь указатели для меня, чтобы выбраться из этого?

1 Ответ

0 голосов
/ 07 мая 2019

По пониманию, я знаю, что мы можем это сделать.Вам нужно реализовать IHttpHandler.Вы можете обратиться к следующему примеру https://www.c -sharpcorner.com / article / dynamic-and-friendly-url-using-mvc /

...