C# 空数据不存在´;在webapi Xamarin中不返回任何内容

C# 空数据不存在´;在webapi Xamarin中不返回任何内容,c#,web-services,rest,asp.net-web-api,xamarin,C#,Web Services,Rest,Asp.net Web Api,Xamarin,我正在使用Xamarin,我构建了一个webapi!我有很多条目,但当用户不编写其中一个或多个条目时,我不会在URL(get)上传递任何内容,因为该值为NULL 示例:我有入口名(名称搜索)、母亲名(母亲名)、父亲名(父亲名)。。。用户写下名字和父亲的名字…我的服务基于它们构建URL localhost/1762/api/nomes/Envolvidos?namesearch=testing&momsName=&dadName=testing 当我这么做的时候,我不会在JSON中返回任何内容!!

我正在使用Xamarin,我构建了一个webapi!我有很多条目,但当用户不编写其中一个或多个条目时,我不会在URL(get)上传递任何内容,因为该值为NULL

示例:我有入口名(名称搜索)、母亲名(母亲名)、父亲名(父亲名)。。。用户写下名字和父亲的名字…我的服务基于它们构建URL localhost/1762/api/nomes/Envolvidos?namesearch=testing&momsName=&dadName=testing 当我这么做的时候,我不会在JSON中返回任何内容!!!!但是我想返回所有包含“namesearch=testing”和“dadName=testing”的数据 如果我写母亲的名字,返回就可以了。 我的WebApi代码是: 命名空间WebApiApp.Controllers {

[RoutePrefix(“api/nomes”)]
公共类命名控制器:ApiController
{
Envolvidos[]Envolvidos=新的Envolvidos[]
{
新Envolvidos{NomePesquisa=“Teste”,NomeMae=“mae”,NomePai=“pai”,DtNasc=“01/01/2000”,NRg=“111”,NCpf=“1000”,NRo=“009-1010/2016”,MdPendente=0},
新Envolvidos{NomePesquisa=“Teste”,NomeMae=“mae”,NomePai=“pai”,DtNasc=“01/01/2000”,NRg=“222”,NCpf=“1111”,NRo=“009-1010/2016”,MdPendente=1},
新Envolvidos{NomePesquisa=“Teste Ferreira”,NomeMae=“mae Teste”,NomePai=“pai”,DtNasc=“01/01/2000”,NRg=“333”/*,NCpf=“1222”,NRo=“009-1010/2016”,MdPendente=false*/},
新Envolvidos{NomePesquisa=“Teste2”,NomeMae=“teste-mae”,NomePai=“teste-pai”,DtNasc=“01/01/2000”,NRg=“444”/*,NCpf=“1333”,NRo=“009-1010/2016”,MdPendente=true*/},
新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]
[路线(“环境视频”)]
公共IEnumerable GetEnvolv(字符串nomePesquisa、字符串nomeMae、字符串nomePai、字符串dtnasc
,字符串nRG,字符串nCPF)
{
返回envolvidos.Where((p)=>
string.Equals(p.NomePesquisa、NomePesquisa、StringComparison.OrdinalIgnoreCase)&&
string.Equals(p.NomeMae,NomeMae,StringComparison.OrdinalIgnoreCase)&&
string.Equals(p.NomePai,NomePai,StringComparison.OrdinalIgnoreCase)&&
等于(p.DtNasc、DtNasc、StringComparison.OrdinalIgnoreCase)&&
string.Equals(p.NRg、NRg、StringComparison.OrdinalIgnoreCase)&&
等于(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;
        }
    }
}
名称空间AppMobile.Services
{
公共类ApiCall
{
静态只读字符串APIRL=”http://XXX:1762/api/{0}/{1}?nomePesquisa={2}&nomeMae={3}&nomePai={4}&dtNasc={5}&nrg={6}&ncpf={7}”;
公共异步任务GetResponse(字符串控制器、字符串方法、字符串nomepesquisa、,
字符串nomemae、字符串nomepai、字符串dtnasc、字符串nrg、字符串ncpf)其中T:class
{
var client=new System.Net.Http.HttpClient();
//定义JSON结果的头,定义HTML和XML
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
//格式a Url com o metodo e o parametro enviado inicia o acesso a Api.Como o acesso serápor meio
//互联网、民主世界、行动计划和行动计划
//e colocamos a关键字wait,paraque a线程主体-UI-continuo sendo executada
//e o método so volte a ser executado quando o下载信息以供最终确定
var urlink=string.Format(APIRL、控制器、方法、nomepesquisa、nomemae、nomepai、dtnasc、nrg、ncpf);
var response=await client.GetAsync(urlink);
//拉那达
var JsonResult=response.Content.ReadAsStringAsync().Result;
if(typeof(T)=typeof(string))
返回null;
//转换为resultado Json para uma Classe utilizando作为Libs do Newtonsoft.Json
var rootobject=JsonConvert.DeserializeObject(JsonResult);
返回根对象;
}
}
}

尝试类似的方法-您想测试参数是否为null或是否匹配

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

big Where子句需要处理参数为null的情况。现在它被编码为只返回每个参数都完全匹配的情况是的,我知道!但我不知道这是怎么做到的。。。我试过了!我是个新手@Jason我需要一个字符串默认值“”Thanksss…我正试图这样做,但使用的是equals!在你的建议下,它就像一个符咒!谢谢,谢谢,谢谢。。。
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...