Проверка форматов типов - не удается найти способ проверки целого числа - PullRequest
0 голосов
/ 25 января 2019

Я настраиваю REST API с помощью Web API 2, который подключается к первой базе данных EF Code. Я пытаюсь подтвердить, что информация возвращается в правильном формате, но не могу найти способ проверить это.

Я пытаюсь подтвердить, что значение CreditCardNumberLastFour не превышает 4 символов.

Проверка PhoneNumber для соответствия регулярному выражению номера телефона и проверка EmailAddress для соответствия регулярному выражению адреса электронной почты

Я пробовал читать множество документов Microsoft по первой базе данных Web API и EF Code, и никто из них не говорил о том, как это сделать.

Так что я гуглил свою проблему и, похоже, немного ошеломляющий случай и не охвачен.

    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 символа.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы можете изучить проверку 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) {

    }
}

Вы можете узнать больше - Здесь

0 голосов
/ 25 января 2019

Вариант 1: просто проверьте длину строкового значения

//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:Валидатор класса

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...