2017-10-19 5 views
1

J'essaie d'appeler un service multiple dans une application C#. La réponse d'un service est transmise en tant que paramètre d'entrée à l'autre service. Comme la réponse premier service est un tableau de nombres, d'appeler l'autre service dans une boucle comme ci-dessousAppel de plusieurs services Web à partir de l'application C#

public async Task<IHttpActionResult> Get() 
{ 
...... 
var response = await iLab_client.GetAsync(uri_serviceid); 
var datafile = await response.Content.ReadAsStringAsync(); 
var returnDataObj = JsonConvert.DeserializeObject<Models.ReqDTO.RootObject>(datafile); 
foreach (var req in returnDataObj.il_response.svc_req) 
{ 
    int request_id = req.id; 

    //Calling the other service passing the input parameter 

    using (var iLab_client_request = new HttpClient()) 
    { 
    string request_Uri = BaseURL_iLab + "svc_req/"+request_id+"/c_forms.json"; 
    Uri uri_request = new Uri(request_Uri); 
    client_request.BaseAddress = uri_request; 
    client_request.DefaultRequestHeaders.Accept.Clear(); 
    client_request.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    client_request.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); 
    var request_response = await client_request.GetAsync(uri_request); 
    var responsefile = await request_response.Content.ReadAsStringAsync(); 
    var request_returnDataObj = JsonConvert.DeserializeObject<Models.DTO.RootObject>(responsefile); 
    return Ok(request_returnDataObj); 
    }}} 

Il trows erreur en disant 'GetResponseFromiLabAPIController.Get()': not all code paths return a value Je comprends que je dois créer un objet qui permet de stocker les réponses à l'aide du Add() et le renvoyer de l'extérieur de la boucle for. Mais je ne suis pas sûr quel devrait être le type d'objet qui peut stocker toutes les réponses de chaque appel de service.

Répondre

0

Vous pouvez stocker les réponses dans une liste.

public async Task<List<IHttpActionResult>> Get() 
{ 
    ...... 

    var responses = new List<IHttpActionResult>>(); 
    var response = await iLab_client.GetAsync(uri_serviceid); 
    var datafile = await response.Content.ReadAsStringAsync(); 
    var returnDataObj = JsonConvert.DeserializeObject<Models.ReqDTO.RootObject>(datafile); 
    foreach (var req in returnDataObj.il_response.svc_req) 
    { 
     int request_id = req.id; 

     //Calling the other service passing the input parameter 

     using (var iLab_client_request = new HttpClient()) 
     { 
      string request_Uri = BaseURL_iLab + "svc_req/"+request_id+"/c_forms.json"; 
      Uri uri_request = new Uri(request_Uri); 
      client_request.BaseAddress = uri_request; 
      client_request.DefaultRequestHeaders.Accept.Clear(); 
      client_request.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      client_request.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); 
      var request_response = await client_request.GetAsync(uri_request); 
      var responsefile = await request_response.Content.ReadAsStringAsync(); 
      var request_returnDataObj = JsonConvert.DeserializeObject<Models.DTO.RootObject>(responsefile); 
      responses.Add(request_returnDataObj); 
     } 
    } 
    return responses; 
}