public IHttpActionResult PostAgentes(PostAgenteViewModel model) { if (!ModelState.IsValid) { // O BadRequest permite usar o ModelState // para informar o cliente dos erros de validação // tal como no MVC. return(BadRequest(ModelState)); } // Copiar os campos do 'model' para um novo objeto de 'Agentes'. // Definir o ID do agente (F12 sobre "GetAgente()") // Isto é garantido que funcione, seja para uma operação, seja para múltiplas // em simultâneo (ex: muitas pessoas a aceder ao site/API), ao contrário // do método db.Agentes.Max(agente => agente.ID) + 1, que NÃO É ATÓMICO, // e abre a possibilidade de crashes ou erros de consistência // (tema de Sistemas Distribuidos) // Ver a migração Migrations/201804251626256_SequenciaIdAgentes.cs var agentes = new Agentes { ID = db.GetIdAgente(), Nome = model.Nome, Esquadra = model.Esquadra }; db.Agentes.Add(agentes); try { db.SaveChanges(); } catch (DbUpdateException) { // Seria muito provável que o método // db.Agentes.Max(agente => agente.ID) + 1 // fizesse com que este if resultasse no Conflict (HTTP 409). if (AgentesExists(agentes.ID)) { return(Conflict()); } else { throw; } } // Num create, é boa prática devolver uma representação // do resultado da criação do objeto na base de dados. return(CreatedAtRoute("DefaultApi", new { id = agentes.ID }, agentes)); }
public IHttpActionResult PostAgentes(PostAgenteViewModel model) { if (!ModelState.IsValid) { // O BadRequest permite usar o ModelState // para informar o cliente dos erros de validação // tal como no MVC. return(BadRequest(ModelState)); } var agentes = new Agentes { ID = db.GetIdAgente(), Nome = model.Nome, Esquadra = model.Esquadra }; db.Agentes.Add(agentes); try { db.SaveChanges(); } catch (DbUpdateException) { // Seria muito provável que o método // db.Agentes.Max(agente => agente.ID) + 1 // fizesse com que este if resultasse no Conflict (HTTP 409). if (AgentesExists(agentes.ID)) { return(Conflict()); } else { throw; } } // Num create, é boa prática devolver uma representação // do resultado da criação do objeto na base de dados. return(CreatedAtRoute("DefaultApi", new { id = agentes.ID }, agentes)); }