我正在编写将验证验证码的属性。为了正常工作,它需要知道秘密,我将其保留在设置中(秘密管理器工具)。但是我不知道如何从属性类读取配置。 asp.net core中的DI支持构造函数注入(不支持属性注入),所以这会报编译错误:
public ValidateReCaptchaAttribute(IConfiguration configuration)
{
if (configuration == null)
{
throw new ArgumentNullException("configuration");
}
this.m_configuration = configuration;
}
因为当我装饰方法时[ValidateReCaptcha]
我无法传递配置
那么如何从属性类的方法中读取配置中的内容呢?
您可以使用ServiceFilter attribute
,更多信息在此博客文章 https://damienbod.com/2015/09/15/asp-net-5-action-filters/ and ASP.NET 文档 https://docs.asp.net/en/latest/mvc/controllers/filters.html#configuring-filters.
[ServiceFilter(typeof(ValidateReCaptchaAttribute))]
public IActionResult SomeAction()
In 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>();
...
}
And 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)