这个问题在这里已经有了答案:
Inject service into Action Filter
(6 个回答)
5年前关闭。
我正在编写将验证验证码的属性。为了正常工作,它需要知道我保存在设置中的 secret ( secret 管理器工具)。但是我不知道如何从属性类中读取配置。 asp.net core中的DI支持构造函数注入(inject)(不支持属性注入(inject)),所以会报编译错误:
public ValidateReCaptchaAttribute(IConfiguration configuration)
{
if (configuration == null)
{
throw new ArgumentNullException("configuration");
}
this.m_configuration = configuration;
}
因为当我用
[ValidateReCaptcha]
装饰方法时我无法通过配置那么如何从属性类中的方法中读取配置中的内容呢?
最佳答案
您可以使用 ServiceFilter attribute
,更多信息在此blog post和 asp.net docs .
[ServiceFilter(typeof(ValidateReCaptchaAttribute))]
public IActionResult SomeAction()
在
Startup
public void ConfigureServices(IServiceCollection services)
{
// Add functionality to inject IOptions<T>
services.AddOptions();
// Add our Config object so it can be injected
services.Configure<CaptchaSettings>(Configuration.GetSection("CaptchaSettings"));
services.AddScoped<ValidateReCaptchaAttribute>();
...
}
和
ValidateReCaptchaAttribute
public class ValidateReCaptchaAttribute : ActionFilterAttribute
{
private readonly CaptchaSettings _settings;
public ValidateReCaptchaAttribute(IOptions<CaptchaSettings> options)
{
_settings = options.Value;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
...
base.OnActionExecuting(context);
}
}
关于asp.net - 在asp.net core rc2应用程序的ActionFilterAttribute中访问IConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876035/