在控制器設置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