Изменить определения проверки во время выполнения / Зарегистрировать реализацию ClientValidatorCache - PullRequest
2 голосов
/ 30 января 2020

Цель: Я хочу изменить определения проверки во время выполнения. Например: пометьте свойство как обязательное.

ModelMetaDataProvider:

Необходимо отключить механизм кэширования из DefaultModelMetaProvier, как описано здесь: Получение IMetadataDetailsProviders для запуска Больше чем Один раз в ASP. NET Core

=> Отлично, проверка на стороне сервера работает! (Вы можете переопределить флаг ValidationMetadata.IsRequired)

Но подождите, а как насчет клиент-проверки (визуализировал атрибуты из неубрушающей проверки, такие как данные-требуются ...)? Он также кэшируется реализацией ClientValidatorCache . (В этом классе нет виртуальных методов или определенного интерфейса)

Поэтому я создал класс, унаследованный от DefaultValidationHtmlAttributeProvider и переопределил метод AddValidationAttributes . Новая реализация вызывает my CustomClientValidatorCache с реализацией, которая не учитывает кэш.

Это очень уродливо и должен быть намного лучший способ сделать это sh.

Итак, заключительные вопросы:

-> Как я могу зарегистрировать свою собственную реализацию для ClientValidatorCache

или есть лучший способ добиться этого? цель?


(я создал тест-репо, где вы можете увидеть мое текущее плохое «решение»): https://github.com/orphisAG/DynamicValidationTest/tree/master/DynamicValidationTest


Ссылки:

ClientValidatorCache

DefaultValidationHtmlAttributeProvider

(редактировать: Добавить-ссылки)


Еще одна попытка:

Создайте ClientModelValidatorProvider (IClientModelValidatorProvider) и установите для IsReusable значение false.

Результат:

Это работает, только если вы измените ValidationMetaData с первоначальный существующий Validator . Потому что ClientValidatorCache вернет кэшированный начальный результат;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...