Mad*_*noy 3 asp.net-mvc asp.net-web-api asp.net-core
我正在Asp.Net Core Web Api中构建自定义验证属性。我需要访问验证器中的IDataProtector和用于访问数据库的其他服务。我已经搜索过,并且没有找到有关此内容的任何文档。ActionFilters可以选择使用ServiceFilter,但是Validation Attribute似乎没有任何选择。有任何想法吗?
小智 8
使用ValidationContext的GetService()方法获取数据库。即
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
MyDbContext db = (MyDbContext) validationContext.GetService(typeof(MyDbContext));
//...
}
Run Code Online (Sandbox Code Playgroud)
您可以重写 IsValid 方法并使用validationContext 来解决依赖关系:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var service = (IExternalService) validationContext.GetService(typeof(IExternalService));
// use service
}
Run Code Online (Sandbox Code Playgroud)
由于验证属性通常是在属性上定义的,因此它们无法通过构造函数接收引用。最好的情况是,如果您确实深入模型绑定,则可能需要自定义一些内容以允许属性注入,但最实际的是,我只是在 Validate 方法中获取对依赖项解析器的引用,并调用适当的方法。
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |