Вы можете реализовать пользовательскую проверку модели, как и любые другие доступные валидаторы ([Required], [MaxLength], [Range] и т. Д. c). Я собираюсь сделать предположение, что вы используете какой-то тип ASP. net MVC framework или Core (ApiController, Controller и т. Д. c). Если вам нужна настраиваемая проверка, скажем, MyModel.Country, вы можете иметь настраиваемый атрибут проверки, который украшает свойство «Country» вашей модели. Вам следует избегать кода бизнес-логики c, такого как проверка в рамках вашей модели, поскольку модели обычно предназначены для хранения данных.
Для создания настраиваемого валидатора для проверки свойства Country. Ссылка на то, как настроить проверку модели. https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.2#custom -атрибуты
public ValidateCountryAttribute:ValidationAttribute{
protected override ValidationResult IsValid(object value, ValidationContext
validationContext)
{
string countryPropertyValue = (string)value;
//Validate your country
if (!ValidCountry(countryPropertyValue){
return new ValidationResult("Country is not valid");
}
//Return Validation.Success
return ValidationResult.Success;
}
private bool ValidCountry(string countryName){
//code to validate against 3rd party goes here.
return true;
}
}
В вашем классе модели:
public class MyModel{
[ValidateCountry]
public string Country{get;set;}
}
Когда вы получаете MyModel в методах вашего контроллера, вы вызываете ModelState.IsValid для определения если полученный вами экземпляр MyModel действителен или нет.
public class MyController:Controller{
public void Post(MyModel model){
if (!ModelState.IsValid){
//MyModel has invalid country, do something....
}
}
}
Преимущество этого подхода теперь в том, что атрибут ValidateCountryAttribute можно поместить в свойство любого класса модели, если вам нужна страна Проверка. Такой подход позволяет упростить повторное использование и не допускает использования бизнес-логики c для проверки вашей модели.