我的应用程序中有 secrets.json
和 Azure KeyVault 设置,完全按照 MS 教程的建议进行。我还有一个授权过滤器。一切正常。
在 Controller 中,我传入 IConfiguration
并执行以下操作:
_config["KEY"]
从我的 secret 中访问值。
如何在自定义 AuthorizationFilter
中访问这些值?它不会让我像通常那样传递属性。
事实上,如果我真的可以在过滤器中获取 DbContext
,我就不需要访问配置,但我也无法将其传递进去。
我想用我的保管库中的值替换该字符串,或者提取我在 Program.cs
中创建的 DbContext
:
// Program.cs:
builder.Services.AddDbContext<DBContext>(options => Options.UseSqlServer(connectionString));
// In my filter...
public void OnAuthorization(AuthorizationFilterContext context)
{
var optionsBuilder = new DbContextOptionsBuilder<DBContext>();
optionsBuilder.UseSqlServer("{STRING}");
var dbContext = new DBContext(optionsBuilder.Options);
//...
}
最佳答案
如果我理解正确的话,你必须使用 httpContext 服务
public class TestFilter : AuthorizeFilter
{
public override Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var config = context.HttpContext.RequestServices.GetService<IConfiguration>();
var db = context.HttpContext.RequestServices.GetService<DBContext>();
return base.OnAuthorizationAsync(context);
}
}
因此您将在授权请求上使用 DI。我假设 .net core 会创建过滤器的单例实例,这就是构造函数注入(inject)不起作用的原因。
关于c# - 如何在授权过滤器中获取secrets.json或azure secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73516241/