Coma Separated Weekdays Attribute Validation in C# for ASP.NET Web API

Here is the snippet of how the validation will work for Coma Separated Weekdays (0 to 6) in C# for ASP.NET Web API

public class WeekDaysAttribute : ValidationAttribute
        {
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                var _weekDays = value as string;
                if (_weekDays.Length == 0)
                {
                    return ValidationResult.Success;
                }
                //Check if the length is greater or not
                if (_weekDays.Length > 1)
                {
                    if (!_weekDays.Contains(\',\'))
                    {
                        return new ValidationResult(\"The values must be comma separated\");
                    }
                    //1st Check: Length should be 7 or less
                    //& each character should not exceed more than 1 character
                    //& the values should be integer
                    if (_weekDays.Split(\',\').Length > 7)
                    {
                        return new ValidationResult(\"The length of the values should be less than or equals to 7\");
                    }
                    else if (_weekDays.Split(\',\').Any(x => x.Length != 1))
                    {
                        return new ValidationResult(\"The length of one or more provided values is greater than 1\");
                    }
                    else if(_weekDays.Split(\',\').Any(x => !int.TryParse(x, out int parsedVal)))
                    {
                        return new ValidationResult(\"One or more provided values is not a valid integer value\");
                    }
                    //2nd Check: Values should not repeat
                    //If the count after distinct doesn\'t match the length then it have repeated elements
                    else if (_weekDays.Split(\',\').Length != _weekDays.Split(\',\').Distinct().Count())
                    {
                        return new ValidationResult(\"One or more values are repeated\");
                    }
                    //3rd Check: Values should be between 0 and 6
                    else if (_weekDays.Split(\',\').Any(x => !(new List<int>() { 0, 1, 2, 3, 4, 5, 6 }).Contains(int.Parse(x))))
                    {
                        return new ValidationResult(\"One or more values are not within the range between 0 and 6\");
                    }
                }
                //If it is 1 then check if it is an Integer value
                else if (!int.TryParse(_weekDays, out int parsedVal))
                {
                    return new ValidationResult(\"The value provided is not integer value\");
                }
                //Check if it is within the week days range
                else if (!(new List<int>() { 0, 1, 2, 3, 4, 5, 6 }).Contains(int.Parse(_weekDays)))
                {
                    return new ValidationResult(\"The value provided is not within the range between 0 and 6\");
                }

                return ValidationResult.Success;
            }
        }

Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *