使用核心的 WebAPI 将依赖项注入验证属性 ASP.NET



我正在ASP中构建一个自定义验证属性。. NET Core WebAPI。我需要在我的验证器和我用来访问数据库的另一个服务中访问IDataProtector。我已经搜索过了,没有找到任何关于这个的文档。ActionFilters有使用ServiceFilter的选项,但似乎没有任何验证属性的选项。什么好主意吗?

使用ValidationContext的GetService()方法来获取数据库。例如

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
  MyDbContext db = (MyDbContext) validationContext.GetService(typeof(MyDbContext));
  //...
}

你可以重写IsValid方法并使用validationContext来解决依赖:

protected override ValidationResult IsValid(object value, ValidationContext validationContext)  
{
    var service = (IExternalService) validationContext.GetService(typeof(IExternalService));
    // use service
}

我们有一个类似的需求,需要将额外的数据传递给一个属性,以便为它提供足够的上下文来执行验证。

我们提出了一种方法来构建一个可以传递给属性的上下文对象。我在这里写了一篇博文。

我们正在使用异步api来执行数据访问,这带来了一些额外的挑战。

因为验证属性通常是在属性上定义的,所以它们不能通过构造函数接收引用。最好的情况是,如果您真的深入研究了模型绑定,可能会有一些东西可以定制以允许属性注入,但实际上,我只是在Validate方法中获得对依赖解析器的引用,并调用适当的方法。

相关内容

  • 没有找到相关文章

最新更新