2017-03-02 52 views
1

我正在研究一个解决方案,我需要在其他web api中调用web api。这两个api都托管在不同的服务器上。所以我找到了一个通用的解决方案来调用下面给出的Web API,但我没有找到任何方法来寻找参数的通用解决方案。制作参数的通用列表当使用HTTPClient调用Web API时

public T Get<t>(int top = 0, int skip = 0) 
{ 
    using (var httpClient = new HttpClient()) 
    { 
     var endpoint = _endpoint + "?"; 
     var parameters = new List<string>(); 

     if (top > 0) 
      parameters.Add(string.Concat("$top=", top)); 

     if (skip > 0) 
      parameters.Add(string.Concat("$skip=", skip)); 

     endpoint += string.Join("&", parameters); 

     var response = httpClient.GetAsync(endpoint).Result; 

     return JsonConvert.DeserializeObject<t>(response.Content.ReadAsStringAsync().Result); 
    } 
} 

可有人请这个帮助,如果我传递任意数量的参数,那么应该把它的键值对,你可以在参数“顶”看。

+0

为什么不通过你传递一个字典到你的函数? –

+0

我试图做到这一点,但是当我们从每种方法调用它的时候,它总是可以创建字典objcet。我们可以用params obejct []来做些什么吗?我试过,但没有得到任何方式来获得我们从调用方法传递的实际参数名称 – user1770461

回答

1

我想你要找的是什么params关键字C#

它可以让你在n一些参数

您的代码看起来像这样

public T Get<t>(params KeyValuePair<string, string>[] kvps) 
{ 
    using (var httpClient = new HttpClient()) 
    { 
     var url = !kvps.Any() ? _endpoint : $"{_endpoint}?{string.Join("&$", kvps.Select(kvp => string.Format("{0}={1}", kvp.Key, kvp.Value)))}"; 
     var response = httpClient.GetAsync(url).Result; 
     return JsonConvert.DeserializeObject<t>(response.Content.ReadAsStringAsync().Result); 
    } 
} 
+0

我试过参数,但因为我需要从中键值对。值可以很容易地获取,但我将如何得到实际的参数名称 – user1770461