【发布时间】:2018-03-04 15:21:17
【问题描述】:
使用扩展方法设置 MVC
services.AddMvc()
然后在控制器中,这也可能适用于 GET,为 POST 操作创建一个方法,并在正文中提供一个参数,例如
[HttpPost("save")]
public Entity Save([FromBody]Entity someEntity)
当调用动作时,MVC 管道将调用 ParameterBinder,而后者又调用DefaultObjectValidator。我不想要验证(一方面它很慢,但更重要的是在复杂的循环图上循环),但似乎在管道中关闭验证的唯一方法是这样的:
public class NonValidatingValidator : IObjectModelValidator
{
public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
{
}
}
在 StartUp/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<IObjectModelValidator>(new NonValidatingValidator()); -
@thejman 这是正确答案
标签: c# asp.net-mvc validation asp.net-core-2.0