none
Web API CRUD com geração automática RRS feed

  • Pergunta

  • Olá a todos,

    Sou iniciante no desenvolvimento com C# e estou passando por uma dificuldade básica, criei um CRUD Web API no visual studio onde via POSTMAN funciona muito bem, consigo realizar todas as ações normalmente, porém, gostaria de ter um listar via nome, ja tenho um listar todos e listar via ID que foram auto gerados, porém não encontro local onde tenha como eu colocar o comando do banco para buscar via Nome
    Segue meu PessoaController.cs:

    namespace CRUDWebApi.Controllers
    {
        public class PessoaController : ApiController
        {
            private DBModel db = new DBModel();
    
            // GET: api/Pessoa
            public IQueryable<Pessoa> GetPessoa()
            {
                return db.Pessoa;
            }
    
            // GET: api/Pessoa/5
            [ResponseType(typeof(Pessoa))]
            public IHttpActionResult GetPessoa(int id)
            {
                Pessoa pessoa = db.Pessoa.Find(id);
                if (pessoa == null)
                {
                    return NotFound();
                }
    
                return Ok(pessoa);
                //ResponseMessage(Request.CreateResponse<string>(HttpStatusCode.Accepted, "FOI "));
    
    
            }
    
    
    
            // PUT: api/Pessoa/5
            [ResponseType(typeof(void))]
            public IHttpActionResult PutPessoa(int id, Pessoa pessoa)
            {
           
    
                if (id != pessoa.IdPessoa)
                {
                    return BadRequest();
                }
    
                db.Entry(pessoa).State = EntityState.Modified;
    
                try
                {
                    db.SaveChanges();
                    
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PessoaExists(id))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
    
                return StatusCode(HttpStatusCode.NoContent);
            }
    
            // POST: api/Pessoa
            [ResponseType(typeof(Pessoa))]
            public IHttpActionResult PostPessoa(Pessoa pessoa)
            {
         
    
                db.Pessoa.Add(pessoa);
                db.SaveChanges();
    
                return CreatedAtRoute("DefaultApi", new { id = pessoa.IdPessoa }, pessoa);
            }
    
            // DELETE: api/Pessoa/5
            [ResponseType(typeof(Pessoa))]
            public IHttpActionResult DeletePessoa(int id)
            {
                Pessoa pessoa = db.Pessoa.Find(id);
                if (pessoa == null)
                {
                    return NotFound();
                }
    
                db.Pessoa.Remove(pessoa);
                db.SaveChanges();
                return Ok(pessoa);
            }
    
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    db.Dispose();
                }
                base.Dispose(disposing);
            }
    
            private bool PessoaExists(int id)
            {
                return db.Pessoa.Count(e => e.IdPessoa == id) > 0;
            }
        }
    }

    Grato desde já.

    segunda-feira, 7 de janeiro de 2019 16:57

Respostas

  • Bom dia,

      talvez isso lhe ajude:

    localhost:3000/api/Pessoa?nome=Douglas Souza

        Vá em Help na sua API que mostra cada metodo que você possui e como utilizar.

    • Marcado como Resposta Douglas Souza05 terça-feira, 8 de janeiro de 2019 10:13
    terça-feira, 8 de janeiro de 2019 10:00

Todas as Respostas

  • Boa tarde,

       Talvez isso :

            [ResponseType(typeof(Pessoa))]
            public IHttpActionResult GetPessoaFromNome(string nome)
            {
                Pessoa pessoa = db.Pessoa.Where(p => p.Nome == nome).FirstOrDefault();
                if (pessoa == null)
                {
                    return NotFound();
                }
    
                return Ok(pessoa);
            }
    
         Poderia utilizar metodo "Contais" que seria o "Like" no sql, ou transformar tudo para maiusculo. Mas basicamente seria isso.

    segunda-feira, 7 de janeiro de 2019 17:14
  • Boa tarde, obrigado pela ajuda!
    Peço perdão pela minha ingenuidade sobre o assunto, mas creio que além de inserir este código na classe controller eu tenho que inserir em outra classe que converse com a mesma, correto?
    segunda-feira, 7 de janeiro de 2019 18:00
  • Boa tarde, obrigado pela ajuda!
    Peço perdão pela minha ingenuidade sobre o assunto, mas creio que além de inserir este código na classe controller eu tenho que inserir em outra classe que converse com a mesma, correto?
     Você teria uma chamada a esse método no postman com o nome "GetPessoaFromNome" passando o nome como parametro. 
    segunda-feira, 7 de janeiro de 2019 18:25
  • Boa tarde, obrigado pela ajuda!
    Peço perdão pela minha ingenuidade sobre o assunto, mas creio que além de inserir este código na classe controller eu tenho que inserir em outra classe que converse com a mesma, correto?

     Você teria uma chamada a esse método no postman com o nome "GetPessoaFromNome" passando o nome como parametro. 

    Tentei de 2 formas no postman:
    1- metodo GET utilizando localhost:3000/api/Pessoa/Douglas Souza
    resultado: "O dicionário de parâmetros contém uma entrada nula para o parâmetro 'id' de tipo que não permite valor anulável 'System.Int32' Para o método 'System.Web.IHttpActionResult GetPessoa(Int32)' em ...... Aqui vejo que somente GET vai me puxar o GetPessoa, que pode tanto listar uma pessoa via ID como lista todos

    2- método GETPESSOAFROMNOME onde digitei o nome do método na parte onde seleciono métodos, que me retornou a seguinte mensagem: "Message": "O recurso solicitado não suporta o método http 'GETPESSOAFROMNOME'."

    Fico no aguardo de como proceder. Abraços!

    segunda-feira, 7 de janeiro de 2019 18:43
  • Bom dia,

      talvez isso lhe ajude:

    localhost:3000/api/Pessoa?nome=Douglas Souza

        Vá em Help na sua API que mostra cada metodo que você possui e como utilizar.

    • Marcado como Resposta Douglas Souza05 terça-feira, 8 de janeiro de 2019 10:13
    terça-feira, 8 de janeiro de 2019 10:00
  • Bom dia Daniel,

    Funcionou! Muito obrigado pela atenção e por toda a ajuda!

    terça-feira, 8 de janeiro de 2019 10:13