c# - 如何在授权过滤器中获取secrets.json或azure secret ?

标签 c# asp.net-core .net-core asp.net-core-mvc

我的应用程序中有 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/

相关文章:

c# - 如果 c# 中的值为 null,则为对象分配默认值

c# - 将 Angular FormData 中的 int 列表发送到 C# 中的 POST Web API

asp.net-core - 将属性添加到 .net core 中 NLog 中的日志消息

c# - 如何从 Azure Key Vault 获取 VaultProperties.NetworkAcls 属性

c# - 在这种情况下警告 CS3006 有效吗?

c# - 如何使用EntityCollection初始化对象?

c# - 为什么 web.config 是在发布时创建的,而不是在 Asp.Net Core API 中构建项目时创建的?

c# - 如何在.NET Core中获取IServiceProvider的实例?

linux - Linux 下带 dotnet 核心的 LDAP

c# - selenium webdriver 中步骤之间的超时