我正在尝试IValidatableObject
在 web api 2 上下文中使用验证。该Validate
方法被调用,但ValidationContext
传递的参数有一个调用的方法,该方法GetService
始终返回 null,因为从未设置验证上下文的服务提供者。
根据我的所有研究,我们可以在 MVC 框架中轻松配置它,但我没有找到任何关于如何在 web api 2 中配置它的信息。
在验证传递给 的模型时,我们如何将服务提供者设置为验证上下文ApiController
?
我正在尝试IValidatableObject
在 web api 2 上下文中使用验证。该Validate
方法被调用,但ValidationContext
传递的参数有一个调用的方法,该方法GetService
始终返回 null,因为从未设置验证上下文的服务提供者。
根据我的所有研究,我们可以在 MVC 框架中轻松配置它,但我没有找到任何关于如何在 web api 2 中配置它的信息。
在验证传递给 的模型时,我们如何将服务提供者设置为验证上下文ApiController
?
好的,我找到了解决方案。
我遇到的问题是我试图完全替换DataAnnotationsModelValidatorProvider
,但框架不支持。最后,我必须在适当的位置寻找当前的工厂,然后注册我的自定义工厂,这将设置将在IValidatableObject
.
要记住的一个重要注意事项,有多个名称空间DataAnnotationsModelValidatorProvider
,但我需要的是System.Web.Http.Validation.Providers.DataAnnotationsModelValidatorProvider
这是它的样子:
private static void SetupIoCInValidationContext(
IServiceProvider serviceProvider)
{
IEnumerable<ModelValidatorProvider> modelValidatorProviders =
GlobalConfiguration
.Configuration.Services.GetModelValidatorProviders();
DataAnnotationsModelValidatorProvider provider =
(DataAnnotationsModelValidatorProvider)
modelValidatorProviders.Single(
x =>
x.GetType()
.IsTypeOf(
typeof(DataAnnotationsModelValidatorProvider)));
provider.RegisterDefaultAdapterFactory((providers, attribute) =>
new CustomDataAnnotationsModelValidator(providers, attribute,
serviceProvider));
provider.RegisterDefaultValidatableObjectAdapterFactory(
providers => new CustomValidatableObjectAdapter(providers, serviceProvider)
);
}