Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Asp.NETCore中从数据库动态添加路由值参数_C#_Asp.net Core_Asp.net Core Mvc_Multi Tenant_Entity Framework Core - Fatal编程技术网

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实例。更棒的是——创建一些缓存服务,将少量路由数据保存在内存中,并通过计时器或请求重新读取。好的,我可以访问应用程序中的每个服务,这似乎很好。