从C#应用程序调用多个Web服务

时间:2017-10-19 19:30:59

标签: c# json web-services json-deserialization

我正在尝试在一个C#应用程序中调用多个服务。来自一个服务的响应作为输入参数传递给另一个服务。响应第一个服务是数字数组,在for循环中调用其他服务,如下所示

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

它告诉错误'GetResponseFromiLabAPIController.Get()': not all code paths return a value我理解我需要创建一个可以使用Add()存储响应的对象,并从for循环外部返回它。但我不确定应该存储每个服务调用的所有响应的对象类型。

1 个答案:

答案 0 :(得分:0)

您可以将回复存储在列表中。

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