AllowHtml, HttpRequestValidationException и ModelState
У меня есть эта модель
public class FooBarViewModel
{
public string Foo { get; set; }
[AllowHtml]
public string Bar { get; set; }
}
Вместо того, чтобы бросать HttpRequestValidationException
если .Foo
отправлено с HTML, я хочу добавить сообщение в ModelState
, Как я мог это сделать?
2 ответа
Вы могли бы украсить Foo
собственность с [AllowHtml]
Атрибут также внутри контроллера проверяет, содержит ли он HTML, который позволит вам добавить пользовательскую ошибку в состояние модели.
Исключение будет выброшено в пределах DefaultModelBinder
в точке, где он звонит ValueProvider.GetValue
,
Чтобы изменить поведение, чтобы перехватить исключение и преобразовать его в ModelState
Ошибка, которую вам нужно будет расширить или заменить DefaultModelBinder
,
Одна возможность - переопределить BindModel
и в точке, где он вызывает GetValue
:
ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);
попробуйте перехватить исключения bindingContext.ModelState.AddModelError
,
Проблема в том, что DefaultModelBinder
Это довольно сложно, поэтому вам, возможно, придется подумать о том, как такое изменение должно взаимодействовать с остальной частью экосистемы привязки модели.