代码之家  ›  专栏  ›  技术社区  ›  SledgeHammer

ASP.NET核心:中间件到控制器的转换问题?

  •  1
  • SledgeHammer  · 技术社区  · 6 年前

    我有一个自大的项目,我在那里执行OAuth(令牌提供者+验证)。一切都很好,但是令牌提供者是基于我在网上找到的一个示例作为中间件实现的。我想将令牌提供程序中间件转换为一个控制器,这样它就会显示在招摇过市中,用户不再窃听我如何获取令牌:)。

    在startup.cs中,我创建了一个tokenProviderOptions对象,并用startup.cs中的值填充它(因为它们也被传递到OAuth验证部分)。当时我在做:

    app.UseMiddleware<TokenProviderMiddleware>(Options.Create(tokenProviderOptions));
    

    中间件得到了选择。

    既然我已经摆脱了中间件,那么如何将令牌提供者选项传递给控制器呢?把它作为一个单件放到DI中似乎有点奇怪。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Henk Mollema    6 年前

    您可以使用 IOptions<T> 接口。例如:

    public class TokenProviderController
    {
        private readonly IOptions<TokenProviderOptions> _options;
    
        public TokenProviderController(IOptions<TokenProviderOptions> options)
        {
            _options = options;
        }
    }
    

    然后可以使用访问选项值 _options.Value .

    可以在启动类中配置选项。通常,您从配置中填充它们:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        private IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<TokenProviderOptions>(Configuration);
        }
    
        // ...
    }
    

    如果选项由硬编码值组成,则可以使用委托配置绑定:

    services.Configure<TokenProviderOptions>(o =>
    {
        o.Foo = "Bar";
    });
    

    更多信息,请查看 the documentation on the options pattern .