在控制器设置MVC与扩展方法在ASP.Net核心禁用模型验证2 MVC
services.AddMvc()
然后,这可能也适用于GET,创建POST操作的方法在体内提供一个参数,例如
[HttpPost("save")]
public Entity Save([FromBody]Entity someEntity)
当动作被称为MVC管道将调用依次调用DefaultObjectValidator
的ParameterBinder。我不想验证(它缓慢的一两件事,但更重要的是循环的复杂周期图形),但似乎关闭验证,在管道中的唯一方法是这样的:
public class NonValidatingValidator : IObjectModelValidator
{
public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
{
}
}
并在启动/ ConfigureServices:
var validator = services.FirstOrDefault(s => s.ServiceType == typeof(IObjectModelValidator));
if (validator != null)
{
services.Remove(validator);
services.Add(new ServiceDescriptor(typeof(IObjectModelValidator), _ => new NonValidatingValidator(), ServiceLifetime.Singleton));
}
这似乎像一个大锤。我环顾四周,无法找到替代品,也试图删除DataAnnotationModelValidator
而没有成功,所以想知道是否有更好/正确的方法来关闭验证?
我认为你的解决方案很好。你可以简化依赖注册:'services.AddSingleton(new NonValidatingValidator());' –
thejman