验证类型格式 - 找不到验证整数的方法

Validating type formats - can't find a way to validate an integer

我正在使用 Web API 2 设置 REST API,它连接到 EF 代码优先数据库。我正在尝试验证返回的信息格式是否正确,但找不到验证方法。

我正在尝试验证 "CreditCardNumberLastFour" 不超过 4 个字符。

验证 PhoneNumber 以匹配 phone 号码的正则表达式并验证 EmailAddress 以匹配电子邮件地址的正则表达式

我尝试阅读大量有关 Web API 和 EF Code first DB 的 Microsoft 文档,其中 none 讨论了应该如何完成。

所以我一直在谷歌搜索我的问题,似乎有点边缘情况,没有涵盖。

    public class User
    {
        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string CreditCardNumberLastFour { get; set; }
        public string EmailAddress { get; set; }
        public long PhoneNumber { get; set; }
        public bool UserInSession { get; set; }
        public Card Card { get; set; }
    }

//我要实现的是什么

    public class LastFour
    {
       //if User.CreditCardNumberLastFour.Length != 4
       //{
       //   
       //}
    }

//POST FROM API /,可能认为支票可以放在这里?但不确定会在哪里发生。

    //POST api/values
    public void Post([FromBody]User value)
    {

        using (var db = new MembershipContext())
        {
            value = new User();
            db.Users.Add(value);
            db.SaveChanges();
        }
    }

对于 CreditCardNumberLastFour,我希望任何多于或少于 4 个字符的内容都会被拒绝,所有超过 4 个字符的内容都会被接受。

方案一:简单检查字符串值的长度

//POST api/values
public void Post([FromBody]User value)
{
    // ensure only 4 characters in the string
    if (value.CreditCardNumberLastFour.Length != 4)
    {
        return;
    }
    using (var db = new MembershipContext())
    {
        value = new User();
        db.Users.Add(value);
        db.SaveChanges();
    }
}

或者如果你想更严格,确保值都是数字

//POST api/values
public void Post([FromBody]User value)
{
    // check for numbers only
    if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
    {
        return;
    }
    // ensure length is 4
    if (value.CreditCardNumberLastFour.Length != 4)
    {
        return;
    }
    using (var db = new MembershipContext())
    {
        value = new User();
        db.Users.Add(value);
        db.SaveChanges();
    }
}

选项 2:class

上的验证器
public class User
{
    public int UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string CreditCardNumberLastFour { get; set; }
    public string EmailAddress { get; set; }
    public long PhoneNumber { get; set; }
    public bool UserInSession { get; set; }
    public Card Card { get; set; }
}

interface IValidator<T> {
    bool Validate(T t);
}

class UserValidator : IValidator<User> {
    public bool Validate(User u) {
        // check for numbers only
        if (!Regex.IsMatch(value.CreditCardNumberLastFour, @"^\d+$")
        {
            return false;
        }
        // ensure length is 4
        if (value.CreditCardNumberLastFour.Length != 4)
        {
            return false;
        }
        // add more checks here if needed ....
    }
}

然后,在您的代码中,您可以执行以下操作

//POST api/values
public void Post([FromBody]User value)
{
    var validator = new UserValidator();
    if (!validator.Validate(value)){
    {
        return;
    }
    using (var db = new MembershipContext())
    {
        value = new User();
        db.Users.Add(value);
        db.SaveChanges();
    }
}

您可以探索 ModelState 验证。您的代码可以修改为 -

using System.ComponentModel.DataAnnotations;
public class User
{
    public int UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [Required]
    [StringLength(4)]
    public string CreditCardNumberLastFour { get; set; }

    [Required]
    [RegularExpression("", ErrorMessage = "Invalid Email")]
    public string EmailAddress { get; set; }
    public long PhoneNumber { get; set; }
    public bool UserInSession { get; set; }
    public Card Card { get; set; }
}

和行动 -

public void Post([FromBody]User value)
{
    if (ModelState.IsValid) {

    }
}

您可以探索更多 - Here