Согласно Проверка модели в ASP.NET Web API , RequiredAttribute не должен влиять на отсутствующий необнуляемый параметр во время проверки модели.
«Недостаточная публикация»:
Здесь клиент не указал значения для цены или веса.Модуль форматирования JSON присваивает отсутствующим свойствам значение по умолчанию, равное нулю.
Состояние модели является допустимым, поскольку для этих свойств установлено значение ноль.
Я обновляю фрагмент кода, для которого [Обязательное] помечено в свойстве следующим образом:
public class Thing
{
[Required]
public int Id { get; set; }
}
и метод контроллера:
public HttpResponseMessage PutThing(Thing thing)
{
if (ModelState.IsValid)
{
if (thing.Id == 0) // Create
{}
else // Update
{}
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
Если я отлаживаю код контроллера, Я вижу, что "thing.id" установлен в 0, но ModelState.IsValid имеет значение false со следующей ошибкой:
400 BadRequest - Thing.PutThing - {\"thing\":{\"Errors\":[{\"Exception\":{\"ClassName\":\"
Newtonsoft.Json.JsonSerializationException\",\"Message\":\"Required property 'Id' not found in JSON. Path '', line 1, position 332
Я что-то упустил из-за того, как это работает?
Кажется, что это неправильное использование атрибута [Required], основанного на том, как метод контроллера использует свойство id в любом случае, но я просто хотел бы знать, почему у меня другое поведениечем то, что говорят документы.
РЕДАКТИРОВАТЬ: я забыл упомянуть, что, если я не проверяю ModelState.IsValid, приведенный выше код работает нормально, и видит эту вещь. Идентификатор равен 0.