public ActionResult Create(CreateAgenteViewModel model) { // ModelState.IsValid --> confronta os dados fornecidos com o modelo // se não respeitar as regras do modelo, rejeita os dados if (!ModelState.IsValid) { return(View(model)); } var agente = new Agentes { ID = db.GetIdAgente(), Nome = model.Nome, Esquadra = model.Esquadra }; // verificar se o ficheiro é realmente uma imagem ---> Ver a classe "CreateAgenteViewModel" // redimensionar a imagem --> ver em casa (pode ser feito com validação custom) // var. auxiliar string nomeFotografia = "Agente_" + agente.ID + Path.GetExtension(model.Fotografia.FileName); string caminhoParaFotografia = Path.Combine(Server.MapPath("~/imagens/"), nomeFotografia); // indica onde a imagem será guardada // guardar o nome da imagem na BD agente.Fotografia = nomeFotografia; try { // guardar a imagem no disco rígido model.Fotografia.SaveAs(caminhoParaFotografia); // adiciona na estrutura de dados, na memória do servidor, // o objeto Agentes db.Agentes.Add(agente); // faz 'commit' na BD db.SaveChanges(); // redireciona o utilizador para a página de início return(RedirectToAction("Index")); } catch (Exception) { // gerar uma mensagem de erro para o utilizador ModelState.AddModelError("", "Ocorreu um erro não determinado na criação do novo Agente..."); } // se se chegar aqui, é pq aconteceu algum problema... // devolve os dados do agente à View return(View(agente)); }
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)); }