C# 在Asp.NETCore中从数据库动态添加路由值参数
我正在创建多租户应用程序,例如,每个库只有一个数据库 我想动态地将库名添加到路由,例如,当用户试图获取所有图书时,我必须添加库名,可以从数据库中检索,例如:C# 在Asp.NETCore中从数据库动态添加路由值参数,c#,asp.net-core,asp.net-core-mvc,multi-tenant,entity-framework-core,C#,Asp.net Core,Asp.net Core Mvc,Multi Tenant,Entity Framework Core,我正在创建多租户应用程序,例如,每个库只有一个数据库 我想动态地将库名添加到路由,例如,当用户试图获取所有图书时,我必须添加库名,可以从数据库中检索,例如:/LibraryName/books/GetAllBooks,这样用户只能从他所属的库中获取所有图书 我该怎么办?实现我自己的IRouter、我自己的模板路由,还有其他什么?简易路径: 将id添加到您的url。请看这个问题的url: https://stackoverflow.com/questions/36718499/dynamicall
/LibraryName/books/GetAllBooks
,这样用户只能从他所属的库中获取所有图书
我该怎么办?实现我自己的IRouter、我自己的模板路由,还有其他什么?简易路径: 将
id
添加到您的url。请看这个问题的url:
https://stackoverflow.com/questions/36718499/dynamically-add-route-value-parameter-from-database-in-asp-net-core
您可以将最后一个路径段更改为任何内容:https://stackoverflow.com/questions/36718499/foo-bar
还是把你带到这里来
不带id:
实施IRouter
。您需要实现两种方法:
1) async Task RouteAsync(RouteContext)
解析传入请求,并将正确的“controller”、“action”和“id”值添加到context.RouteData
集合中。稍后,MVC将使用此信息呼叫您的控制器
2) VirtualPathData GetVirtualPath(VirtualPathContext上下文)
为控制器+操作+id值构建url(字符串),在context.values
集合中提供
这可以帮助您:
id
不是最简单的方法,因为您需要在每个请求中传递它,这太疯狂了。而且,我可以在自定义路由器中使用依赖注入吗?例如,将ApplicationDbContext
添加到MyRouter
constructor.AFAIK,在应用程序启动时创建IRouter
s。在DbContext上创建并保持单个实例不是一个好主意。。。。RouteContext
和VirtualPathContext
都有Context
属性,这是大家熟悉的HttpContext
,它们有两个IServiceProvider
-s-ApplicationServices
和RequestServices
——最好向它们询问您的DbContext实例。更棒的是——创建一些缓存服务,将少量路由数据保存在内存中,并通过计时器或请求重新读取。好的,我可以访问应用程序中的每个服务,这似乎很好。