#c# #asp.net #asp.net-web-api #model-binding
#c# #asp.net #asp.net-web-api #привязка модели
Вопрос:
В следующем фрагменте кода объект ExpenseRecord всегда равен нулю, когда я делаю POST-запрос с телом: {"id":null,"name":"Test","reason":"Flight","date":"01.10.2016","amount":10,"text":"Test"}
[HttpPost]
public IActionResult Post([FromBody]ExpenseRecord record)
{
try
{
this.repository.Create(record);
return this.Created($"api/expenses/{record.Id}", null);
}
catch (ArgumentNullException)
{
return this.BadRequest();
}
catch (InvalidOperationException)
{
return new StatusCodeResult((int)HttpStatusCode.Conflict);
}
}
Запись расходов выглядит следующим образом:
public class ExpenseRecord : IEquatable<ExpenseRecord>
{
public Guid Id { get; set; }
public string Date { get; set; }
public string Name { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public ExpenseReason Reason { get; set; }
public decimal Amount { get; set; }
public string Text { get; set; }
...
}
Если для идентификатора установлен правильный форматированный идентификатор GUID, это работает. Однако при публикации новой записи я не могу (или, скорее, не хочу) указывать идентификатор?
Комментарии:
1. Как вы сделали POST-запрос?
2. Расширенный клиент Rest: POST / api / расходы HTTP/ 1.1 ХОСТ: localhost:57938 тип содержимого: application / json длина содержимого: 89 {«id»: null, «name»:»Test», «reason»:»Flight», «date»:»01.10.2016″,»количество»: 10, «текст»: «Тест»}
3.
Guid
является astruct
, следовательно, не может допускать нулевых значений.4. Есть ли подходящее решение для этой проблемы?
Ответ №1:
Как уже было сказано, идентификатор guid не может быть нулевым.
// change
public Guid Id { get; set; }
// to
public Guid? Id { get; set; }
или отправьте пустой идентификатор guid в своем сообщении