Я использую автоматическая проверка модели (см. «Улучшенная обработка ввода») для поддержания чистоты моих контроллеров;Итак:
[HttpPost]
[ProducesResponseType(typeof(Product), 201)]
public IActionResult Post([FromBody] Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
product = _repository.AddProduct(product);
return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
}
становится:
[HttpPost]
[ProducesResponseType(201)]
public ActionResult<Product> Post(Product product)
{
_repository.AddProduct(product);
return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
}
Однако у меня есть несколько моделей, которые имеют свойство phonenumber.Я хотел бы «нормализовать» эти до проверки модели.Я имею в виду, что я хочу нормализовать эти свойства (типа string
) из всех видов ввода, например:
- + 31 23 456 7890
- (023) 4567890
- 023 - 4567 890
- ...
К E.164 запись :
Таким образом, в какой бы форме пользователь ни вводил номер телефона, перед вызовом проверки я хочу быть уверенным, что он всегда находится в форме E.164 («нормализовано»).Как эта нормализация не имеет значения (я использую libphonenumber , если вы настаиваете).В качестве второго, может быть, менее запутанного примера, я могу представить, что строка всегда будет в верхнем / нижнем регистре до вызова валидации.
Какой будет правильный или лучший способ вызвать мой процесс нормализации до проверка вызывается?Должен ли я написать какое-нибудь промежуточное ПО?
Также важно: мои модели содержат атрибуты, поэтому нормализатор знает, какие свойства нужно нормализовать (и как):
class ExampleModel {
public int Id { get; set; }
public string Name { get; set; }
[NormalizedNumber(NumberFormat.E164)]
public string Phonenumber { get; set; }
}
Я полагаю, промежуточное ПО (? Или каково бы ни было решение) может затем взять модель, выяснить, есть ли у какого-либо свойства (рекурсивно) атрибут и вызвать нормализатор, если необходимо.