2016-07-26 29 views
2

私はこのような構造..Web APIからこのJsonを受け取る方法は?

Clienteサイド<持っている - >ウェブアピ戻る - - >ウェブアピフロント<>データベースだから、

、私のウェブアピ戻る私にJSONを送信すると、私が知っているドントを結果を得る方法。

データベースとの接続が表示されません。

Web Api Frontでは、var data = response.Content.ReadAsStringAsync().Result;という行は、すべて正しい値のJson Arrayを提供します。しかし、私はクライアント側のApiCallにこれをどのように送るのか分かりません。

返品には何が必要ですか?

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


    //buscar os dados com os parametros digitados 
    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")); 

     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; 
    } 

} 

[ウェブアピフロント呼び出すウェブアピ戻る]

[HttpGet] 
[Route("Envolvidos")] 
public IEnumerable<Envolvido> GetEnvolv(string nomePesquisa, string nomeMae, string nomePai, string dtNasc 
    , string nRG, string nCPF) 
{ 

    DataSet lretorno = new DataSet(); 

    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://Localhost:1762/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     // Usage 
     HttpResponseMessage response = client.GetAsync("api/nomes/Envolvidos?nomePesquisa="+nomePesquisa+"&nomeMae="+nomeMae+"&nomePai="+nomePai+"&dtNasc="+dtNasc+"&nrg="+nRG+"&ncpf="+nCPF+"").Result; 

     if (response.IsSuccessStatusCode) 
     { 
      var data = response.Content.ReadAsStringAsync().Result; 
      //Envolvido envolvidoResult = JsonConvert.DeserializeObject<Envolvido>(data); 
      return data.AsEnumerable().Select(row => new Envolvido 
     { 

     }); 

     } 
     else 
     { 
      Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 
     } 


     //return WHATTTTT?? ; 

    } 

} 

[WEBAPI戻る]

[HttpGet] 
[Route("Envolvidos")] 
public IEnumerable<Envolvido> GetEnvolv(string nomePesquisa, string nomeMae, string nomePai, string dtnasc 
    , string nRG, string nCPF) 
{ 

    DataSet lretorno = new DataSet(); 

    string connectionString = GetConnectionString(); 
    using (OracleConnection connection = new OracleConnection()) 
    { 
     connection.ConnectionString = connectionString; 

     OracleDataReader reader = null; 
     OracleCommand cmd = new OracleCommand(); 
     cmd.Connection = connection; 
     cmd = new OracleCommand("MOBILE.XAPIMANDADOMOBILE.BUSCAPOSSIVEISCANDIDATOSPF", connection); 
     cmd.CommandType = CommandType.StoredProcedure; 

     //variáveis entrada    
     cmd.Parameters.Add(new OracleParameter("ivnome",nomePesquisa)); 
     cmd.Parameters.Add(new OracleParameter("ivmae", nomeMae)); 
     cmd.Parameters.Add(new OracleParameter("ivpai", nomePai)); 
     cmd.Parameters.Add(new OracleParameter("ivdatanasc", dtnasc)); 
     cmd.Parameters.Add(new OracleParameter("ivrg", nRG)); 
     cmd.Parameters.Add(new OracleParameter("icpf", nCPF)); 
     //variáveis de saida   
     cmd.Parameters.Add(new OracleParameter("oretorno", OracleDbType.RefCursor)).Direction = ParameterDirection.Output; 
     cmd.Parameters.Add(new OracleParameter("qretorno", OracleDbType.RefCursor)).Direction = ParameterDirection.Output; 

     connection.Open(); 
     cmd.ExecuteNonQuery(); 

     reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

     //CRIO A LISTA 
     lretorno.Load(reader, LoadOption.OverwriteChanges, "BUSCAPOSSIVEISCANDIDATOSPF"); 
     connection.Close(); 
     connection.Dispose(); 


     //CARREGO O DATASET E TRANSFORMO PARA IENUMERABLE E RETORNO SEUS VALORES PRO JSON 
     return lretorno.Tables[0].AsEnumerable().Select(row => new Envolvido 
     { 
      SUSPID = Convert.ToInt32(row["SUSPID"]), 
      IVNOME = Convert.ToString(row["SUSPNOME"]), 
      IVMAE = Convert.ToString(row["SUSPMAE"]), 
      IVPAI = Convert.ToString(row["SUSPPAI"]), 
      IVDATANASC = Convert.ToString(row["SUSPDATANASC"]).Replace(" 00:00:00", ""), 
      IVRG = Convert.ToString(row["RG"]), 
      ICPF = Convert.ToString(row["CPF"]), 
      MANDADO = Convert.ToInt16(row["TEMMANDADO"]), 
      OCORRENCIA = Convert.ToInt16(row["TEMOCORRENCIA"]), 

     }); 


    } 
} 
+0

何も変更する必要がありますかそれをクライアントに送信する前にWeb API Frontの結果に? – Nkosi

+0

@Nkosiはい!この行でデータを返します.AsEnumerable()。Select(row => new Envolvido { });この選択が間違っているので、すべての値0またはnullを取得しています。 –

+0

@Nkosiまた、もう1つの戻り値data.AsEnumerable()を選択します(行=>新しいEnvolvido {SUSPID = Convert.ToInt32( "SUSPID")) ( "SUSPDATANASC")、IVNE = Convert.ToString( "SUSPNAME")、IVMAE = Convert.ToString( "SUSPMAE")、IVPAI = Convert.ToString( "SUSPPAI")、IVDATANASC = Convert.ToString( "SUSPDATANASC" MANDADO = Convert.ToInt16( "TEMMANDADO")、OCORRENCIA = Convert.ToInt16( "TEMOCORRENCIA")、IVRG = Convert.ToString( "RG")、ICPF = Convert.ToString( "CPF" ")、});エラーが発生しましたSystem.FormatExceptionがユーザーコードで処理されていませんHResult = -2146233033 –

答えて

2

ウェブAPIバックエンド[サービスは、Webアピフロントを呼び出します]返されますIEnumerable<Envolvido>

ウェブアピフロントエンドは、Webアピバックエンドを呼び出すとき、それはちょうどそれがリスト、コレクション、配列も、IEnumerable<Envolvido>に割り当て可能である何かにそれをデシリアライズする必要がある...など

//...other code removed for brevity 
if (response.IsSuccessStatusCode) 
{ 
    var data = response.Content.ReadAsAsync<List<Envolvido>>().Result; 
    return data; 
} 
//...other code removed for brevity 
+0

ああ私のゴシ!ありがとう、私の友人...魅力のように働く! –

関連する問題