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 Это довольно сложно, поэтому вам, возможно, придется подумать о том, как такое изменение должно взаимодействовать с остальной частью экосистемы привязки модели.

Другие вопросы по тегам