2016-06-08 3 views
-1

Я использую Xamarin, и я создал webapi! У меня много Entrys, но когда пользователь не пишет ни одного из них, я ничего не пропускаю по URL (get), потому что значение имеет значение NULL.Пустые данные ничего не возвращает в webapi Xamarin

ПРИМЕР: У меня есть записи Имя (namesearch), имя матери (имя_мануса), имя отца (имя-dadName) ... пользователь пишет имя и имя отца ... моя служба создает URL-адрес на основе их localhost/1762/api/nomes/Envolvidos? namesearch = тестирование & momsName = & dadName = тестирование Когда я делаю это momsName =, я ничего не верну в JSON !!!! Но я хочу вернуть все данные, которые имеют «namesearch = testing» и «dadName = testing» Если я напишу имя матери, вернитесь в порядке. Мой WebAPI код: пространства имен WebApiApp.Controllers {

[RoutePrefix("api/nomes")] 
    public class NomesController : ApiController 
    { 

     Envolvidos[] envolvidos = new Envolvidos[] 
     { 
      new Envolvidos {NomePesquisa = "Teste", NomeMae = "mae", NomePai = "pai", DtNasc = "01/01/2000", NRg = "111", NCpf="1000", NRo="009-1010/2016", MdPendente=0}, 
      new Envolvidos {NomePesquisa = "Teste", NomeMae = "mae", NomePai = "pai", DtNasc = "01/01/2000", NRg = "222", NCpf="1111", NRo="009-1010/2016", MdPendente=1}, 
      new Envolvidos {NomePesquisa = "Teste Ferreira", NomeMae = "mae teste", NomePai = "pai", DtNasc = "01/01/2000", NRg = "333"/*, NCpf="1222", NRo="009-1010/2016" ,MdPendente=false*/}, 
      new Envolvidos {NomePesquisa = "Teste2", NomeMae = "teste mae",NomePai = "teste pai", DtNasc = "01/01/2000", NRg = "444"/*, NCpf="1333", NRo="009-1010/2016" ,MdPendente=true*/}, 
      new Envolvidos {NomePesquisa = "Teste de Teste", NomeMae = "teste mae",NomePai = "pai", DtNasc = "01/01/2000", NRg = "555"/*, NCpf="1444", NRo="009-1010/2016" ,MdPendente=true*/} 
     }; 

     [HttpGet] 
     [Route("Envolvidos")] 
     public IEnumerable<Envolvidos> GetEnvolv(string nomePesquisa, string nomeMae, string nomePai, string dtnasc 
      , string nRG, string nCPF) 
     { 
      return envolvidos.Where((p) => 
       string.Equals(p.NomePesquisa, nomePesquisa, StringComparison.OrdinalIgnoreCase)&& 
       string.Equals(p.NomeMae, nomeMae, StringComparison.OrdinalIgnoreCase)&& 
       string.Equals(p.NomePai, nomePai, StringComparison.OrdinalIgnoreCase)&& 
       string.Equals(p.DtNasc, dtnasc, StringComparison.OrdinalIgnoreCase)&& 
       string.Equals(p.NRg, nRG, StringComparison.OrdinalIgnoreCase)&& 
       string.Equals(p.NCpf, nCPF, StringComparison.OrdinalIgnoreCase)); 
     } 

    } 
} 

Моя_служба

namespace AppMobile.Services 
{ 
    public class ApiCall 
    { 
     static readonly string ApiUrl = "http://XXX:1762/api/{0}/{1}?nomePesquisa={2}&nomeMae={3}&nomePai={4}&dtNasc={5}&nrg={6}&ncpf={7}"; 

     public async Task<T> GetResponse<T>(string controller, string method, string nomepesquisa, 
      string nomemae, string nomepai, string dtnasc, string nrg, string ncpf) where T : class 
     { 
      var client = new System.Net.Http.HttpClient(); 

      //Definide o Header de resultado para JSON, para evitar que seja retornado um HTML ou XML 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      //Formata a Url com o metodo e o parametro enviado e inicia o acesso a Api. Como o acesso será por meio 
      //da Internet, pode demorar muito, para que o aplicativo não trave usamos um método assincrono 
      //e colocamos a keyword AWAIT, para que a Thread principal - UI - continuo sendo executada 
      //e o método so volte a ser executado quando o download das informações for finalizado 
      var urllink = string.Format(ApiUrl, controller, method, nomepesquisa, nomemae, nomepai, dtnasc, nrg, ncpf); 
      var response = await client.GetAsync(urllink); 

      //Lê a string retornada 
      var JsonResult = response.Content.ReadAsStringAsync().Result; 

      if (typeof(T) == typeof(string)) 
       return null; 

      //Converte o resultado Json para uma Classe utilizando as Libs do Newtonsoft.Json 
      var rootobject = JsonConvert.DeserializeObject<T>(JsonResult); 
      return rootobject; 
     } 
    } 
} 
+0

Ваш большой оператор Where должен обрабатывать случай, когда аргумент равен null. Прямо сейчас он закодирован, чтобы возвращать только те случаи, когда каждый аргумент соответствует точно – Jason

+0

Да, я знаю! но я не знаю, как это сделать ... я пробовал! Iam a newbie ... @Jason Мне нужно что-то вроде значения по умолчанию в строке "" –

ответ

0

Попробуйте что-то вроде этого, - вы хотите, чтобы проверить, если аргумент является недействительным или если оно соответствует

return envolvidos.Where((p) => 

(string.IsNullOrEmpty(nomePesquisa) || string.Equals(p.NomePesquisa, nomePesquisa, StringComparison.OrdinalIgnoreCase)) 

&& 

(string.IsNullOrEmpty(nomeMae) || string.Equals(p.NomeMae, nomeMae, StringComparison.OrdinalIgnoreCase)) 

&& 

// add other cases here... 
+0

Спасибо ... я пытался это сделать, но с равными! С вашим предложением, работает как шарм! Спасибо, спасибо, спасибо ... –

Смежные вопросы