none
Ajuda no desenvolvimento de uma webapi RRS feed

  • Pergunta

  • Bom dia,

    Esta é minha primeira webapi em asp e necessito de ajuda para poder prosseguir , meu problema é simples para quem ja trabalha com webapi/asp, mas para mim esta sendo um tormento,

    Tenho a seguinte situação:

    Model:

    USERDETAIL

    public partial class UserDetail
        {
            public int Cd_UserDetail { get; set; }
            public int Cd_User { get; set; }
            public string St_CNPJCPF { get; set; }
            public string St_Nationality { get; set; }
            public string St_UserImageFilePath { get; set; }
        }

    USERDETAILCONTROLLER

    namespace xxxxWebAPI.Controllers
    {
        public class UserDetailController : ApiController
        {
            private xxxxModel1 db = new xxxxModel1();

            // GET api/UserDetail
            public IEnumerable<UserDetail> GetUserDetails()
            {
                return db.UserDetail.AsEnumerable();
            }

            // GET api/UserDetail/5
            public UserDetail GetUserDetail(int id)
            {
                UserDetail userdetail = db.UserDetail.Find(id);
                if (userdetail == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return userdetail;
            }

    Como faço para incluir uma pesquisa (GET)  pelo campo public string St_CNPJCPF ?

    Grato

    Paulo.

    terça-feira, 22 de março de 2016 13:44

Respostas

  • Segue um exemplo seguindo a sua estrutura:

    // GET api/UserSearch?documento=1001010
    [HttpGet]
    public IEnumerable<UserDetail> UserSearch(string documento)
    {
    	var users = db.UserDetail.Where(o => o.St_CNPJCPF == documento);
    	return users;
    }

    terça-feira, 22 de março de 2016 15:30
  • Você acessa através desta URL:
    http://www.spymech.com/SPYWAPI/api/UserDetail/?documento=98747651000072
    quarta-feira, 23 de março de 2016 00:57

Todas as Respostas

  • Segue um exemplo seguindo a sua estrutura:

    // GET api/UserSearch?documento=1001010
    [HttpGet]
    public IEnumerable<UserDetail> UserSearch(string documento)
    {
    	var users = db.UserDetail.Where(o => o.St_CNPJCPF == documento);
    	return users;
    }

    terça-feira, 22 de março de 2016 15:30
  • olá, pode fazer assim direto.

            public UserDetail search(string CNPJCPF)
            {
               //implementação
    
                //return userdetail;
            }
    uri api/UserDetail/search?CNPJCPF=000000
    terça-feira, 22 de março de 2016 15:31
    Moderador
  • Tentei com esta implementação , não tive sucesso

    http://www.spymech.com/SPYWAPI/api/UserSearch?documento=1

    Resposta:

    Error>
    <Message>
    No HTTP resource was found that matches the request URI 'http://www.spymech.com/SPYWAPI/api/UserSearch?documento=1'.
    </Message>
    <MessageDetail>
    No type was found that matches the controller named 'UserSearch'.
    </MessageDetail>
    </Error>

    Abaixo o Controller

    namespace SpyMechWebAPI.Controllers
    {
        public class UserDetailController : ApiController
        {
            private SpyMechModel1 db = new SpyMechModel1();

            // GET api/UserDetail
            public IEnumerable<UserDetail> GetUserDetails()
            {
                return db.UserDetail.AsEnumerable();
            }


            // GET api/UserDetail
            [HttpGet]
            public IEnumerable<UserDetail> UserSearch(string documento)
            {
                var users = db.UserDetail.Where(o => o.St_CNPJCPF == documento);
                return users;
            }

            // GET api/UserDetail/5
            public UserDetail GetUserDetail(int id)
            {
                UserDetail userdetail = db.UserDetail.Find(id);
                if (userdetail == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return userdetail;
            }
    //api/UserDetail/search?CNPJCPF=000000
    public UserDetail search(string CNPJCPF)
    {
    UserDetail userdetail = db.UserDetail.Find(CNPJCPF);
                if (userdetail == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return userdetail;

    }

            //// PUT api/UserDetail/5
            //public HttpResponseMessage PutUserDetail(int id, UserDetail userdetail)

    quarta-feira, 23 de março de 2016 00:47
  • Tambem Tentei com esta implementação , não tive sucesso

    http://www.spymech.com/SPYWAPI/api/UserDetail/search?CNPJCPF="98785341000072"

    http://www.spymech.com/SPYWAPI/api/UserDetail/search?CNPJCPF=98785341000072

    Resposta:

    <Error>
    <Message>The request is invalid.</Message>
    <MessageDetail>
    The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'SpyMechWebAPI.Models.UserDetail GetUserDetail(Int32)' in 'SpyMechWebAPI.Controllers.UserDetailController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
    </MessageDetail>

    </Error>


    Abaixo o Controller

    namespace SpyMechWebAPI.Controllers
    {
        public class UserDetailController : ApiController
        {
            private SpyMechModel1 db = new SpyMechModel1();

            // GET api/UserDetail
            public IEnumerable<UserDetail> GetUserDetails()
            {
                return db.UserDetail.AsEnumerable();
            }


            // GET api/UserDetail
            [HttpGet]
            public IEnumerable<UserDetail> UserSearch(string documento)
            {
                var users = db.UserDetail.Where(o => o.St_CNPJCPF == documento);
                return users;
            }

            // GET api/UserDetail/5
            public UserDetail GetUserDetail(int id)
            {
                UserDetail userdetail = db.UserDetail.Find(id);
                if (userdetail == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return userdetail;
            }
    //api/UserDetail/search?CNPJCPF=000000
    public UserDetail search(string CNPJCPF)
    {
    UserDetail userdetail = db.UserDetail.Find(CNPJCPF);
                if (userdetail == null)
                {
                    throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
                }

                return userdetail;

    }

            //// PUT api/UserDetail/5
            //public HttpResponseMessage PutUserDetail(int id, UserDetail userdetail)

    quarta-feira, 23 de março de 2016 00:50
  • Você acessa através desta URL:
    http://www.spymech.com/SPYWAPI/api/UserDetail/?documento=98747651000072
    quarta-feira, 23 de março de 2016 00:57
  • Tenta utilizar uma rota no seu método/api, como abaixo:

    [Route("api/users/getuserdetails/{documento}")]

    public IEnumerable<UserDetail> GetUserDetails(string documento){

    ... restante do código.

    Pode ser que não esteja dando certo pq sem vc definir uma rota o framework está tentando utilizar a rota padrão, no caso ele procuraria o parametro id, então faz esse teste.

    terça-feira, 29 de março de 2016 12:46
  • Acessando a URL podemos perceber que funcionou, então marque como resposta.
    terça-feira, 5 de abril de 2016 00:52