Я должен проверить три вещи, когда потребитель моего API пытается обновить клиента.
Запретить обновление клиента, если:
Имя или фамилия пусты
Для определенной страны, если внутренняя коллекция X клиента пуста, создайте исключение. X трудно объяснить, так что просто предположим, что это какая-то коллекция. Для всех остальных стран X не применяется / всегда будет пустым. Но если это определенная страна, то X обязателен. Так что это почти условно обязательный атрибут. Клиент принадлежит стране, поэтому это выясняется из отправляемого JSON.
Запретить обновление клиента, если выполняются некоторые условия в базе данных.
Итак, в основном я застрял со следующей проблемой, и мне нужен совет о наиболее подходящем способе ее решения:
Нужно ли создавать фильтр действий для проверки объекта клиента перед сохранением? Или было бы лучше создать собственный атрибут проверки, полученный из ValidationAttribute, и переопределить функцию-член IsValid.
В основном вопрос о том, если (имя пусто, если x, если y и т. д.) vs (!ModelState.IsValid)
А затем с помощью IsValid заставить работать настраиваемые атрибуты.
Кажется, что атрибуты проверки лучше всего подходят для «простой» проверки, т.е. обязательного поля. Но как только вы начинаете вдаваться в такие вещи, как «Мне нужно просмотреть мою базу данных или проанализировать заголовок HTTP-запроса на наличие пользовательских значений и, исходя из этого, invalid = false», тогда кажется почти неправильным делать такие вещи так близко к лицо.
Мысли?
Спасибо!