Привязка модели не работает, если идентификатор GUID равен нулю

#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 является a struct , следовательно, не может допускать нулевых значений.

4. Есть ли подходящее решение для этой проблемы?

Ответ №1:

Как уже было сказано, идентификатор guid не может быть нулевым.

 // change
public Guid Id { get; set; }

// to
public Guid? Id { get; set; }
 

или отправьте пустой идентификатор guid в своем сообщении