Как использовать атрибуты DataAnnotation для проверки модели в консольном приложении - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь использовать проверку атрибута DataAnnotation вне приложения ASP. net MVC. В идеале я хотел бы взять любой класс модели в своем консольном приложении и украсить его следующим образом:

private class MyExample
{
    [Required]
    public string RequiredFieldTest { get; set; }

    [StringLength(100)]
    public int StringLengthFieldTest { get; set; }

    [Range(1, 100)]
    public int RangeFieldTest { get; set; }

    [DataType(DataType.Text)]
    public object DataTypeFieldTest { get; set; }

    [MaxLength(10)]
    public string MaxLengthFieldTest { get; set; }
}

Затем (псевдо) сделать что-то вроде этого:

var item = new MyExample(); // not setting any properties, should fail validation
var isValid = item.Validate();

Я нашел это код в примере онлайн:

var item = new MyExample(); // not setting any properties, should fail validation

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

// carry out validation.
var isValid = Validator.TryValidateObject(item, context, errorResults);

// isValid will be FALSE

Что дает мне "isValid = false", НО только кажется, что он поддерживает поле Required и игнорирует остальные.

Следующий код возвращает isValid = true когда я ожидаю, что он вернет false:

var item = new MyExample() {
    RequiredFieldTest = "example text"
};

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

// carry out validation.
var isValid = Validator.TryValidateObject(item, context, errorResults);

// isValid will be TRUE - not expected behavior

Таким образом, все другие попытки проверки с использованием атрибутов (длина строки, диапазон, максимальная длина, тип данных и т. Д. c) все проходят как допустимые.

Кто-нибудь видел такое поведение раньше или знает, почему оно происходит?

1 Ответ

3 голосов
/ 15 января 2020

TryValidateObject по умолчанию проверяет только атрибут required. Вы можете передать ему четвертый параметр validateAllProperties = true, чтобы проверить другие атрибуты.

if (!Validator.TryValidateObject(item, context, errorResults, true)) {
    //invalid
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...