繁体   English   中英

Asp.net核心:中间件到控制器转换问题?

[英]Asp.net Core: middleware to controller conversion issue?

我有一个Swagger项目,我在做OAuth(令牌提供者+验证)。 一切都运行正常,但令牌提供程序是基于我在网上找到的样本实现的中间件。 我想将令牌提供程序中间件转换为控制器,以便它显示在Swagger中,用户放弃了如何获取令牌的麻烦:)。

在startup.cs中,我创建了一个TokenProviderOptions对象,并使用生活在startup.cs中的值填充它(因为它们也被传递给oauth验证部分)。 那时我正在做:

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

而中间件正在获得选择。

既然我已经摆脱了中间件,我怎样才能将tokenProvider选项传递给控制器​​? 将它作为单身人士放入DI中似乎有点奇怪。

您可以使用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";
});

有关更多信息,请查看有关选项模式的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM