Проблема связана с типами данных полей. Кажется, что модель не любит отображать целые и логические значения - хотя с Guides все в порядке (это те 3, с которыми мне приходится иметь дело, не уверенные в других). Я проверил, что попытка сопоставить с int или bool вызывает сбой привязки.
Я решил отправить массив без элемента root
data: JSON.stringify(attributeData.attributes)
Я использовал отличный инструмент (окрик http://json2csharp.com/) и просто вставил в тело, которое у меня есть в запросе браузера, сгенерировав это:
public class httpAttributeModel
{
public string CharacterAttributeId { get; set; }
public string CharacterId { get; set; }
public string AttributeTypeId { get; set; }
public string AttributeOrdinal { get; set; }
public string AttributeName { get; set; }
public string AttributeValue { get; set; }
public string AttributeModifier { get; set; }
public string Proficient { get; set; }
public string AttributeNote { get; set; }
}
С эта подпись контроллера:
public IActionResult RosterMaintenanceAttribute([FromBody] List<httpAttributeModel> attributes)
Это работает. Итак, я начал настраивать типы данных, чтобы попытаться сопоставить исходную модель, которую я использовал для получения полезной нагрузки, и увидеть, где она не удалась. Фактические значения для int и bool действительны для типа (за исключением кавычек вокруг них из stringify), но здесь все перестает работать. Я не знаю, есть ли что-то, что можно сделать на стороне клиента, чтобы обозначить тип данных, или, что более вероятно, что-то на стороне сервера, которое помогает связующему модели? Для этой проблемы это достаточно хорошо, я могу преобразовать значения int и bool, как только я нахожусь в Контроллере.
В моем окончательном решении, в модели выше, у меня есть первые три поля, установленные как Guids и остальное как есть.