2014-03-31 27 views
0

我需要发送和接收一个IList到我的Web API:发送和接收一个IList <int>与ASP.NET网页API

API方法:

public IList<int> GetKeywordIdsFromIds([FromUri]List<int> ids) 
{ 
    // this methods retuns null or an IList<int> 
    return _iKeywordService.GetKeywordIdsFromIKeywordIds(ids); 
} 

调用方法:

public List<int> GetKeywordIdsFromIds(IList<int> iKeywordIds) 
{ 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(API_BASE_URL); 
      client.DefaultRequestHeaders.Accept.Clear(); 

      return client.GetAsync(url + iKeywordIds).Result.Content.ReadAsAsync<List<int>>().Result; 
     } 
} 

我得到错误:

Exception:Thrown: "No MediaTypeFormatter is available to read an object of type 'List`1' from content with media type 'text/html'." (System.Net.Http.UnsupportedMediaTypeException) 

编辑:

我不知道这是否帮助,但我得到这个从IIS日志文件:

2014-03-31 16:11:31 127.0.0.1 GET /api/ikeyword/getkeywordidsfromids/System.Collections.Generic.List`1[System.Int32] - 80 - 127.0.0.1 - 404 0 2 1 

EDIT2:

默认路由:

 config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
+0

看到这个帖子,如何将参数添加到您的代码:http://stackoverflow.com/questions/217070/how-do-i-add-query -parameters-to-a-getmethod-using-java-commons-httpclient –

+0

嗨,谢谢,但是我没有看到IList的任何示例 Patrick

+0

你在哪里列出了'List IDS?你把它留在体内还是尿吗? –

回答

1

要调用在查询字符串中使用int s列表的Web API操作,请执行此操作...

/api/ikeyword/getkeywordidsfromids?ids=1&ids=3&ids=4 

/api/ikeyword/getkeywordidsfromids?ids[]=1&ids[]=3&ids[]=4 

从你的IIS日志,它看起来像你需要正确格式化您的控制台应用程序列表,并把它添加到URL。调用代码应该是这个样子......

var parameters = ids.Select(id => string.Format("ids={0}", id)).ToArray(); 
var url = string.Format("/api/ikeyword/getkeywordidsfromids?{0}", string.Join("&", parameters)); 
+0

嗨,谢谢,以及如何处理值WebApi方法? – Patrick

+0

'ids'应该是'int'列表,你可以直接将它传递给'_iKeywordService.GetKeywordIdsFromIKeywordIds(ids)'... –

+0

它正在工作,请更正你的代码,以便我可以设置你的答案正确的:删除“=”我n格式化方法:getkeywordidsfromids?{0}或者在Api中不会收到第一个值 – Patrick