Как проверить только часть состояния модели в веб-интерфейсе asp.net core 2 - PullRequest
0 голосов
/ 11 октября 2018

Мы используем DTO Usermaster в 2 разных проектах.

public class UserMaster : BaseProperties
{      

    [BsonElement]
    [BsonRequired]
    [Required]
    public string FirstName { get; set; }

    [BsonElement]
    [BsonRequired]
    [Required]
    public string LastName { get; set; }

    [BsonElement]
    [BsonRequired]
    [EmailAddress]
    [Required]
    public string EmailId { get; set; }

    [BsonElement]
    [BsonRequired]
    [DataType(DataType.Password)]
    [Required]
    public string Password { get; set; }

    [BsonIgnore]
    [DataType(DataType.Password)]
    [Required]
    public string NewPassword { get; set; }        
}

Теперь мы используем этот DTO в 2 разных проектах.
Проект 1 является администратором в asp.net MVC 5.0. Там мы можем использовать ModelState.IsValidField для проверки только части всей этой Модели.
Проект 2 - это сборка Web Api в ядре asp.net 2. Там я не смог найти никакого решения, которое могло бы проверять только электронную почту и пароль для входа в систему ..

В основном я сталкиваюсь с проблемой в веб-интерфейсе asp.net core 2, где я не могу указать точный элемент данных, который может быть только проверен.Я должен передать что-нибудь в другие [Обязательные] поля для проверки запроса.аналогично ModelState.IsValidField

Любые решения ??

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

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

Если вы хотите уменьшить дублирование кода,просто продолжайте использовать наследование:

public class UserLogin : BaseProperties
{
    [BsonElement]
    [BsonRequired]
    [EmailAddress]
    [Required]
    public string EmailId { get; set; }

    [BsonElement]
    [BsonRequired]
    [DataType(DataType.Password)]
    [Required]
    public string Password { get; set; }
}

public class UserMaster : UserLogin
{      

    [BsonElement]
    [BsonRequired]
    [Required]
    public string FirstName { get; set; }

    [BsonElement]
    [BsonRequired]
    [Required]
    public string LastName { get; set; }

    [BsonIgnore]
    [DataType(DataType.Password)]
    [Required]
    public string NewPassword { get; set; }        
}
0 голосов
/ 11 октября 2018

в вашем DTO реализует IValidatableObject

public class UserMaster : BaseProperties, IValidatableObject
{      

    [BsonElement]
    [BsonRequired]
    [Required]
    public string FirstName { get; set; }

    [BsonElement]
    [BsonRequired]
    [Required]
    public string LastName { get; set; }

    [BsonElement]
    [BsonRequired]
    [EmailAddress]
    [Required]
    public string EmailId { get; set; }

    [BsonElement]
    [BsonRequired]
    [DataType(DataType.Password)]
    [Required]
    public string Password { get; set; }

    [BsonIgnore]
    [DataType(DataType.Password)]
    [Required]
    public string NewPassword { get; set; }      

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
    //you custom validation here...
    }  
}

Итак, если вы можете обнаружить контекст, в котором он используется, то вы уже в пути ...

...