AllowHtml, HttpRequestValidationException и ModelState - PullRequest
1 голос
/ 17 июля 2011

У меня есть эта модель представления

public class FooBarViewModel
{
    public string Foo { get; set; }

    [AllowHtml]
    public string Bar { get; set; }
}

Вместо того, чтобы выдавать HttpRequestValidationException, если .Foo отправлено с HTML, я хочу добавить сообщение к ModelState.Как я мог это сделать?

Ответы [ 2 ]

1 голос
/ 17 июля 2011

Вы можете также украсить свойство Foo атрибутом [AllowHtml] и внутри контроллера проверить, содержит ли оно HTML, что позволит вам добавить пользовательскую ошибку в состояние модели.

0 голосов
/ 27 октября 2012

Исключение будет сгенерировано в пределах DefaultModelBinder в точке, где оно вызывает ValueProvider.GetValue.

Чтобы изменить поведение, чтобы перехватить исключение и преобразовать его в ошибку ModelState, вам необходимо расширить или заменить DefaultModelBinder.

Одна возможность - переопределить BindModel, и в точке, где он вызывает GetValue:

ValueProviderResult valueProviderResult = bindingContext.UnvalidatedValueProvider.GetValue(bindingContext.ModelName, skipValidation: !performRequestValidation);

попробуйте перехватить исключения и позвоните bindingContext.ModelState.AddModelError.

Проблема в том, что DefaultModelBinder довольно сложен, поэтому вам, возможно, придется подумать о том, как такое изменение должно взаимодействовать с остальной частью экосистемы привязки модели.

...