如何验证只在asp.net核心2网络API模型国家的一部分(How to validate only

2019-10-30 04:07发布

我们在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

任何解决方案?

Answer 1:

如果你有两个不同的验证要求,那么你应该有两种不同的视图模型/ 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; }        
}


Answer 2:

在您的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...
    }  
}

所以,如果你可以检测方面,有人正在使用,然后你对你的方式......



文章来源: How to validate only a part of Model State in asp.net core 2 web api