Подтвердить что ты не робот

Проверьте, действительно ли модель вне контроллера

У меня есть вспомогательный класс, которому передается массив значений, который затем передается новому классу из моей модели. Как проверить, что все значения, присвоенные этому классу, действительны? Другими словами, как использовать функциональность ModelState в классе неконтроллеров.

От контроллера:

public ActionResult PassData()
{
    Customer customer = new Customer();
    string[] data = Monkey.RetrieveData();
    bool isvalid = ModelHelper.CreateCustomer(data, out customer);
}

От помощника:

public bool CreateCustomer(string[] data)
{
    Customter outCustomer = new Customer();
    //put the data in the outCustomer var
    //??? Check that it valid

}
4b9b3361

Ответ 1

Вы можете использовать проверку аннотаций данных вне контекста ASP.NET:

public bool CreateCustomer(string[] data, out Customer customer)
{
    customer = new Customer();
    // put the data in the customer var

    var context = new ValidationContext(customer, serviceProvider: null, items: null);
    var results = new List<ValidationResult>();

    return Validator.TryValidateObject(customer, context, results, true);
}

Ответ 2

Не используйте ModelState вне контроллера. Я не вижу, что делает Monkey.RetrieveData(), но в общем случае я не передавал a) простые данные из HTTPRequest и b) нефиксированные данные, такие как строковые массивы, на ваш сервер. Пусть веб-инфраструктура проверяет входящие данные и вводит типизированные классы для использования в бэкэнд. Обратите внимание, что проверка на вставку HTML (XSS-скриптинг и т.д.) Должна выполняться вручную, если вы вручную применяете данные.

Вместо этого используйте привязки модели и т.д. и передайте типизированные данные (например, экземпляры класса клиентов) на ваш сервер. Существует более старая запись от Скотта Гу, которая показывает это для MVC1: http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

В вашем примере пусть привязка модели MVC создаст вашего клиента и применит требуемые значения полей (см. ссылку выше, как работает этот шаблон). Затем вы предоставляете экземпляр вашего клиента для вашего бэкэнд, где дополнительные проверки проверки могут быть выполнены на основе вашего типизированного экземпляра клиента (например, вручную или с аннотациями данных).