C# .net core 3中间件还是授权属性?那怎么做呢?
我在C# .net core 3中间件还是授权属性?那怎么做呢?,c#,asp.net,.net-core,middleware,jwt-auth,C#,Asp.net,.net Core,Middleware,Jwt Auth,我在 .net核心3.0 web api 令牌jwt/owin EF核心3 我有一个多数据库项目。用户在登录表单中从列表中选择数据库。之后,我在“selectedDb”声明中设置dbName/connectionString 在每个控制器中,我都有8到20个需要DbContext作为参数constructor=>的类(manager),我无法在控制器构造函数中创建manager或DbContext的距离,因为我还没有登录令牌 因此,在每个操作中,我都会创建dbContext(token-pr
- .net核心3.0 web api
- 令牌jwt/owin
- EF核心3
[Authorize]
public ActionResult Api_1()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_1 stuff
}
[Authorize]
public ActionResult Api_2()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_2 stuff
}
[Authorize]
public ActionResult Api_3()
{
var connectionString = User.Identity.GetConnectionString();
InitContextAndManager(connectionString);
//some api_3 stuff
}
在@Ruard van Elburg的帮助下 这里是解决办法
public ControllerConstructor(DbConnectionInfo db)
{
_databaseContext = db.DbContext;
_someManager1 = new SomeManager(_dbcontext);
}
public class DbConnectionInfo
{
public DatabaseContext DbContext { get; set; }
public DbConnectionInfo(IHttpContextAccessor httpContextAccessor)
{
var user = httpContextAccessor.HttpContext.User;
//for question example
DbContext = new DatabaseContext(user.Identity.GetConnectionString);
}
}
[Authorize]
public ActionResult Api_1()
{
//some api_1 stuff
}
可能重复的请看我的答案。在DbConnectionInfo中,您可以访问声明并设置connectionstring。对不起,我不明白您的意思@RuardvanElburg@RuardvanElburgNET核心支持依赖项注入(DI)软件设计模式,这是一种实现类及其依赖项之间控制反转(IoC)的技术。从。在该模式中,您不创建对象(new关键字),而是注入它们。我的答案基于DI。SomeManager应该被注入控制器中,例如,
公共MyController(SomeManager SomeManager)
。SomeManager的构造函数是:publicsomemanager(SomeContext-SomeContext)
,其中SomeContext构造函数是:publicsomecontext(DbConnectionInfo)
。如果配置正确,DI会自动解析最后一个类。如果您收到一个错误,那么可能是因为某个服务没有添加到DI,所以无法解决该问题。有了DI,就不需要new
关键字了。可以使用新建
创建DTO,但不能使用服务。在Api_1中:\u someManager1.DoSomething()代码>某些管理器1只能存在于控制器1和3中,某些管理器2/3存在于控制器1 2 4 5中
public ControllerConstructor(DbConnectionInfo db)
{
_databaseContext = db.DbContext;
_someManager1 = new SomeManager(_dbcontext);
}
public class DbConnectionInfo
{
public DatabaseContext DbContext { get; set; }
public DbConnectionInfo(IHttpContextAccessor httpContextAccessor)
{
var user = httpContextAccessor.HttpContext.User;
//for question example
DbContext = new DatabaseContext(user.Identity.GetConnectionString);
}
}
[Authorize]
public ActionResult Api_1()
{
//some api_1 stuff
}