我有一个带有一堆控制器的有效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) {...
所以给我的是看起来像这样的标准整体模板:
https://api.example.com/api/{controller}/{action}
我想要使数据库成为URL的一部分,直观的位置位于控制器的前面。我也可以跳过第二个api
位,因为我没有在该基址上运行任何其他操作。
https://api.example.com/{database}/{controller}/{action}
我已经可以通过将controller属性更改为以下内容来提取数据库名称:
[Route("{database}/[controller]")]
但是然后我必须在每个操作方法中插入代码以检查路由等,否则可能会(在额外的输入之外)故意不执行它。
理想情况下,我想将此添加到startup.cs
中的默认路由,并向中间件添加服务,该服务将检查所请求数据库上已认证用户的特权,并在适当时继续进行。这样,我就可以将安全性放在一个地方,而又无法在控制器中忘记它。
我还无法弄清楚如何将其与属性混合使用,它们似乎相互冲突。
可以做到吗?有没有人对我有帮助?
答案 0 :(得分:0)
据了解,我知道我们可以做到。您需要实现IHttpHandler。 您可以参考以下示例https://www.c-sharpcorner.com/article/dynamic-and-friendly-url-using-mvc/