[英]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.