使用扩展方法设置 MVC
services.AddMvc()
然后在控制器中(这也可能适用于 GET),使用主体中提供的参数创建 POST 操作的方法,例如
[HttpPost("save")]
public Entity Save([FromBody]Entity someEntity)
当调用该操作时,MVC 管道将调用 ParameterBinder,而 ParameterBinder 又调用DefaultObjectValidator
。我不想要验证(一方面它很慢,但更重要的是在复杂的循环图上循环),但似乎在管道中关闭验证的唯一方法是这样的:
public class NonValidatingValidator : IObjectModelValidator
{
public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
{
}
}
并在启动/配置服务中:
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.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
应禁用自动模型状态验证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)