简单的ASP.NET WebApi参数绑定不起作用

时间:2012-12-08 23:39:41

标签: asp.net-web-api

我很困惑为什么这可以在我的开发服务器上运行(使用IIS Express),而不是在生产服务器上运行(Win2K8 R2 + IIS 7.5)。

我有一个非常简单的WebAPI控制器方法:

 public HttpResponseMessage Get(string notificationType = "all", int skip=0, int take=25) {
        Trace.WriteLine(String.Format("Hello, world! From NotifcationsController#Get notificationType={0} skip={1} take={2}", notificationType, skip, take));   
        Trace.WriteLine(String.Format("And furthermore, HttpContext.Current.Request[notificationType]={0}", HttpContext.Current.Request["notificationType"]));
        Trace.WriteLine(String.Format("And finally, HttpContext.Current.Request.QueryString[notificationType]={0}", HttpContext.Current.Request.QueryString["notificationType"]));
      ...
 }

http://localhost:1398/api/notifications?notificationType=comments的开发服务器上,一切正常。我在trace.axd中看到了这个:

 Trace Information
 Category   Message From First(s)   From Last(s)
 Hello, world! From NotifcationsController#Get notificationType=comments skip=0 take=25     
 And furthermore, HttpContext.Current.Request[notificationType]=comments
 And finally, HttpContext.Current.Request.QueryString[notificationType]=comments

但是当我在http://api.nameofmywebsite.com/api/notifications?type=comments点击这个控制器时,我在trace.axd中看到了这个:

 Trace Information
 Category   Message From First(s)   From Last(s)
 Hello, world! From NotifcationsController#Get notificationType=all skip=0 take=25
 And furthermore, HttpContext.Current.Request[notificationType]=    
 And finally, HttpContext.Current.Request.QueryString[notificationType]=

 ...

 Querystring Collection
 Name   Value
 type   comments

这对我来说非常非常奇怪。基于trace.axd中的内容,它肯定似乎不是路由问题......它正在触及正确的控制器和操作。

为什么querystring参数不会映射到生产环境中控制器操作的参数!?

无论它值多少,我都在开发和服务器上使用相同的web.config。我不知道配置差异会导致这种差异......

1 个答案:

答案 0 :(得分:0)

我是个白痴。

这不起作用,因为我在生产服务器上点击“notification?type = comments”而不是“notification?notificationType = comments”

方法参数名称必须与要发生绑定的查询字符串参数名称匹配。我知道,但没有意识到我传递了错误的querystring参数名称!发生的事情是我几周前更改了方法参数名称,在此期间忘了它,并没有意识到浏览器的自动完成功能为我提供了包含旧参数名称的历史记录匹配。