Лучший способ обрабатывать HttpClient внутри класса модели в C# - PullRequest
0 голосов
/ 26 мая 2020

У меня есть модель. У него есть одно свойство под названием country. Мне нужно проверить это свойство с помощью сторонней службы, т.е. страна действительна или нет

Я могу думать следующими способами:

  1. Должен ли я вводить HttpClient внутри конструктора модели и вызывать Сторонняя служба внутри самой модели?
  2. Следует ли мне создавать другую службу, в которой я вызываю стороннюю службу и внедряю другую службу внутри моей модели?
  3. Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете реализовать пользовательскую проверку модели, как и любые другие доступные валидаторы ([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 для проверки вашей модели.

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