【问题标题】:Empty data doesn´t return nothing in webapi Xamarin空数据在 webapi Xamarin 中不返回任何内容
【发布时间】:2016-10-08 22:28:01
【问题描述】:

我正在使用 Xamarin,并且我构建了一个 webapi!我有很多条目,但是当用户不写一个/多个条目时,我不会在 URL (get) 上传递任何内容,因为值变为 NULL。

示例:我有名称(namesearch)、母亲姓名(momsName)、父亲姓名(dadName)……用户写下姓名和父亲姓名……我的服务基于 URL 构建在他们身上 localhost/1762/api/nomes/Envolvidos?namesearch=testing&momsName=&dadName=testing 当我这样做 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;
        }
    }
}

【问题讨论】:

  • 你的大 Where 子句需要处理参数为空的情况。现在它被编码为只返回每个参数完全匹配的情况
  • 是的,我知道!但我不知道该怎么做……我试过了!我是新手... @Jason 我需要类似字符串默认值“”

标签: c# web-services rest asp.net-web-api xamarin


【解决方案1】:

试试这样的 - 你想测试一个参数是否为空或者它是否匹配

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...

【讨论】:

  • Thanksss...我试图这样做,但等于!有了你的建议,就像一个魅力!谢谢,谢谢,谢谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多