Проверка для списка Enum в теле запроса, который все еще является списком, если поля - PullRequest
0 голосов
/ 30 марта 2020

Я настроил список полей, которые необходимо передать как тело запроса для веб-API. FluentValidation был использован для проверки. Я получаю правильный ответ и проверки для других полей, но когда дело доходит до проверки для списка Enum, не работает должным образом. Не могли бы вы дать мне руку, чтобы понять это? (Я предполагаю, что невозможно проверить список enum, который является частью списка). это некоторая часть кода: (Как вы можете видеть, я могу отправить этот запрос для «действий», который не является правильным. Он поставляется с 2 действиями в виде одной строки), он отлично работает для двух других, но не для «действий» ")

Спасибо: -)

 public enum properAction
    {
        [Description("I")]
        Insert = 0,

        [Description("U")]
        Update = 1,

        [Description("D")]
        Delete = 2
    }
  {

       public List<string> FirstNames { get; set; }


       public List<string> positions { get; set; }


       public List<properAction?> Actions { get; set; }
   }

valdtions:

    //first name
        RuleForEach(x => x.SearchAuditsRequest.FirstNames).StringLengthRangeValidation(1, 10);
        // postiton
        RuleForEach(x => x.SearchAuditsRequest.positions).StringLengthRangeValidation(1, 10);
        // Action
        RuleForEach(x => x.SearchRequestBody.Actions).IsInEnum();

PostMan:

enter image description here

1 Ответ

0 голосов
/ 30 марта 2020

При десериализации перечислений в запросе строка, содержащая несколько допустимых значений перечисления, интерпретируется как последовательность битовых флагов, которые будут объединяться с использованием побитового оператора AND.

Это означает, что «вставить, обновить» "будет переводиться в 0b0 & 0b1 (двоичный 0 и двоичный 1), который равен 0b1, который снова является значением перечисления Update, что действительно допустимо.

Чтобы убедиться, что подобные комбинации не перекрываются в другое допустимое значение перечисления, используйте ненулевые кратные 2, как показано ниже:

public enum properAction
{
    Insert = 1,
    Update = 2,
    Delete = 4
}

В двоичном формате все эти значения представляют собой строки нулей с одним 1, что означает, что комбинация нескольких значения будут иметь несколько 1 с, что никогда не будет допустимым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...