我们在2个不同的项目使用Usermaster DTO。
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是一个网络API建立在asp.net核心2.我找不到任何解决方案只能验证电子邮件和密码登录的目的..
基本上我所面临的问题在asp.net核心2网络API,在那里我可以不指定,可能是唯一的验证确切的数据成员。 我必须通过其他[必需]字段的任何验证请求。 同样ModelState.IsValidField
任何解决方案?
如果你有两个不同的验证要求,那么你应该有两种不同的视图模型/ 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; }
}
在您的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...
}
}
所以,如果你可以检测方面,有人正在使用,然后你对你的方式......