首页 新闻 会员 周边

WebApi获取不到参数的问题

1
[已关闭问题] 关闭于 2013-06-09 19:49

看了园子里关于HttpClient+WebApi的一篇文章,自己试着写了一个,代码几乎一样,但是却无法获得参数

var requestJson = JsonConvert.SerializeObject(new { startId=2,itemcount=3});
            var httpContent = new StringContent(requestJson);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            var httpClient = new HttpClient();
            var responseJson = httpClient.PostAsync("http://localhost:1702/api/values/sitelist", httpContent)
                .Result.Content.ReadAsStringAsync().Result;

            Response.Write(responseJson);
            Response.End();
public class ValuesController : ApiController
    {
        public IList<MyContent> SiteList(int startId,int itemcount)
        {
            List<MyContent> list = new List<MyContent>();
            list.Add(new MyContent() { Id=1, Name="塞克蓝海", Tag="aa"});
            list.Add(new MyContent() { Id = 2, Name = "塞克绿海", Tag = "bb" });
            list.Add(new MyContent() { Id = 3, Name = "塞克红海", Tag = "cc" });
            list.Add(new MyContent() { Id = 4, Name = "塞克黄海", Tag = "dd" });
            list.Add(new MyContent() { Id = 5, Name = "塞克青海", Tag = "ee" });

            var result = (from MyContent mc in list
                          where mc.Id > startId
                          select mc)
                        .Take(itemcount)
                        .ToList();
            return result;
        }
    }

出现这个错误提示

"The parameters dictionary contains a null entry for parameter 'startId' of
non-nullable type 'System.Int32' for method
'System.Collections.Generic.IList`1[QM.API.Models.MyContent] SiteList(Int32,
Int32)' in 'QM.API.Controllers.ValuesController'. An optional parameter must be
a reference type, a nullable type, or be declared as an optional parameter."

而如果把请求路径写成http://localhost:1702/api/values/sitelist?startId=2&itemcount=3这样的话,就可以正常获取数据。

怀疑服务端没有解析到参数的问题,于是把SiteList(int startId,int itemcount)参数写成SiteList(object pp),断点可以请求大SiteList且pp={"startId":2,"itemcount":3},请求帮助是什么原因导致的。

Sicket的主页 Sicket | 初学一级 | 园豆:2
提问于:2012-06-27 16:38
< >
分享
所有回答(1)
0

可能问题与Visual Studio内置的Web服务器有关,你用IIS试试

dudu | 园豆:31007 (高人七级) | 2012-06-27 16:47
支持(0) 反对(0) Sicket | 园豆:2 (初学一级) | 2012-06-27 16:49

@Sicket: 那你把例子中的客户端代码复制过来试试

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2012-06-27 16:57

@dudu: 也不行,只有在原项目上运行才正常,复制到自己的项目就没办法获取到参数,很困惑,试了IIS一样有问题,不知道是什么原因

支持(0) 反对(0) Sicket | 园豆:2 (初学一级) | 2012-06-27 17:04

@Sicket: 可能是ASP.NET WebAPI版本的问题,你在原项目中用NuGet将WebAPI更新至最新版本试试。

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2012-06-28 15:59

@Sicket: 这个问题的原因已经找到,我写了一篇博客:

痴情意外:ASP.NET WebAPI RC 竟然不支持最常用的json传参

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2012-07-12 23:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册