在MVC项目和Web API项目之间解析[FromBody]参数的区别

时间:2015-06-03 20:24:39

标签: c# asp.net-mvc asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

我的一位同事早些时候点了我一下,帮助他调查一下他用Web API控制器功能看到的奇怪行为。方法看起来像这样。

// api/cart?channel=123&qsaid=456
public void Post(string channel, string qsaid, [FromBody]CartDTO postedData)
{
    string message = string.Empty;
    if (postedData == null)
    {
        message = string.Format("POST data is missing");
        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
    }
}

无论如何," postedData"参数始终是null(我们只是为了弄乱它而编写了这个异常)。这只是一个带有一些字符串属性的简单类,它通过POST主体作为JSON传递。在SO和其他地方有很多关于这个问题的问题,有各种各样的决议,但似乎都没有。

我抓住了他的项目副本,亲眼看到了这个行为,并尝试了上面提到的一些解决方案。最后,我注意到他将这个项目作为一个MVC 4项目,并将Web API控制器作为其中的一部分(尽管该项目只是服务,而不是前端)。

故障排除,我创建了自己的项目,从一个空白的ASP.NET Web应用程序开始,并选中该框以包含Web API组件 - 然后将控制器粘贴到我的项目中,并更改命名空间以及复杂对象的定义。

将我的Fiddler2端点更改为指向新项目 - 并且它有效。该对象正确通过并且所有属性都已分配。

除了项目本身是作为MVC4与带有Web API组件的空白Web应用程序创建之外,我没有任何解释。我的问题是 - 这些项目类型如何处理控制器参数(特别是帖子正文中的复杂类型)是否有一些功能上的差异 - 或者是我在某种程度上改变了项目类型的其他东西?

0 个答案:

没有答案