Исключение будет сгенерировано в пределах DefaultModelBinder
в точке, где оно вызывает ValueProvider.GetValue
.
Чтобы изменить поведение, чтобы перехватить исключение и преобразовать его в ошибку ModelState
, вам необходимо расширить или заменить DefaultModelBinder
.
Одна возможность - переопределить BindModel
, и в точке, где он вызывает GetValue
:
ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);
попробуйте перехватить исключения и позвоните bindingContext.ModelState.AddModelError
.
Проблема в том, что DefaultModelBinder
довольно сложен, поэтому вам, возможно, придется подумать о том, как такое изменение должно взаимодействовать с остальной частью экосистемы привязки модели.