使用扩展方法设置MVC
services.AddMvc()
Run Code Online (Sandbox Code Playgroud)
然后在控制器中,这也可能适用于GET,使用正文中提供的参数为POST操作创建一个方法,例如
[HttpPost("save")]
public Entity Save([FromBody]Entity someEntity)
Run Code Online (Sandbox Code Playgroud)
当调用该动作时,MVC管道将调用ParameterBinder,而ParameterBinder又调用DefaultObjectValidator.我不想要验证(一件事情很慢,但更重要的是循环复杂的循环图),但似乎关闭管道验证的唯一方法是这样的:
public class NonValidatingValidator : IObjectModelValidator
{
public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
{
}
}
Run Code Online (Sandbox Code Playgroud)
并在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));
}
Run Code Online (Sandbox Code Playgroud)
这看起来像一把大锤.我环顾四周,找不到替代方案,也试图删除DataAnnotationModelValidator没有成功,所以想知道是否有更好/正确的方法来关闭验证?