Может ли JsonPatchDocument использовать атрибуты - PullRequest
0 голосов
/ 23 октября 2019

Могу ли я использовать атрибуты на своих объектах и ​​все еще использовать JsonPatchDocument?

В настоящее время, если у меня есть этот объект:

public class Test {
        public float FloatTest { get; set; }
}

Я могу отправлять только с плавающей точкой, как в пост-запрос и в патче-запросе.

Если я добавлю атрибут:

public class Test {
        [Range(1, 100)]
        public float FloatTest { get; set; }
}

Теперь я могу, после пост-запроса, отправлять только значения с плавающей точкой от 1 до 100. В патчетем не менее, ModelState остается действительным, даже если я исправляю с FloatTest = 1000.

Есть ли возможность проверить это в функции ApplyTo в JasonPatchDocument или есть какие-либо другие лучшие практики, которые я пропустил?

1 Ответ

1 голос
/ 24 октября 2019

Используйте TryValidateModel для проверки ваших данных, см. Следующий код:

[HttpPatch]
    public IActionResult JsonPatchWithModelState([FromBody] JsonPatchDocument<Test> patchDoc)
    {
        if (patchDoc != null)
        {
            var test = new Test();

            // Apply book to ModelState
            patchDoc.ApplyTo(test, ModelState);

            // Use this method to validate your data
            TryValidateModel(test);

            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            return new ObjectResult(test);
        }
        else
        {
            return BadRequest(ModelState);
        }
    }

Результат: enter image description here

...