You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Authorization Filter中获取secrets.json或Azure密钥?

自定义AuthorizationFilter中访问配置密钥或获取DbContext的解决方案

方案一:从请求服务中获取IConfiguration读取密钥

自定义过滤器无法直接通过构造注入依赖,你可以借助AuthorizationFilterContext的HttpContext.RequestServices获取已注册的IConfiguration实例,进而读取密钥保管库中的值:

public void OnAuthorization(AuthorizationFilterContext context)
{
    // 从请求服务容器中获取IConfiguration
    var configuration = context.HttpContext.RequestServices.GetRequiredService<IConfiguration>();
    // 读取密钥保管库中对应的连接字符串
    var connectionString = configuration["KEY"];

    // 按需初始化DbContext
    var optionsBuilder = new DbContextOptionsBuilder<DBContext>();
    optionsBuilder.UseSqlServer(connectionString);
    var dbContext = new DBContext(optionsBuilder.Options);
    // ...后续业务逻辑
}

方案二:直接获取已配置的DbContext(更推荐)

既然你已经在Program.cs中注册了DBContext,完全不用手动重新构建配置,直接从服务容器中获取现成的实例即可:

public void OnAuthorization(AuthorizationFilterContext context)
{
    // 直接获取已注册的DBContext实例
    var dbContext = context.HttpContext.RequestServices.GetRequiredService<DBContext>();
    // ...直接使用dbContext进行数据操作,无需手动配置连接字符串
}

进阶:让过滤器支持构造注入(更规范的写法)

如果希望过滤器能像控制器一样通过构造注入依赖,可以先把过滤器注册为服务,再通过特性引用:

  1. 在Program.cs中注册过滤器:
builder.Services.AddScoped<MyAuthorizationFilter>();
  1. 修改过滤器类,添加构造注入:
public class MyAuthorizationFilter : IAuthorizationFilter
{
    private readonly IConfiguration _configuration;
    private readonly DBContext _dbContext;

    // 通过构造函数注入依赖
    public MyAuthorizationFilter(IConfiguration configuration, DBContext dbContext)
    {
        _configuration = configuration;
        _dbContext = dbContext;
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // 直接使用注入的实例
        var connectionString = _configuration["KEY"];
        // 或者直接操作_dbContext
        // ...
    }
}
  1. 在控制器上使用ServiceFilter特性引用过滤器:
[ServiceFilter(typeof(MyAuthorizationFilter))]
public class YourController : ControllerBase
{
    // ...控制器逻辑
}

内容的提问来源于stack exchange,提问作者flashsplat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:15:41