Web Api不绑定(合理)简单模型

时间:2013-08-05 14:18:49

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

冒着问一个菜鸟问题的风险,我正在尝试测试一个网址,以便向webapi端点发布它应该有模型绑定到的,如果这个MVC:

    public ReturnModel GetSomeInformation( ValidationPackage validationPackage)
    {
        return new ReturnModel();
    }

其中ValidationPackage类似于:

public class ValidationPackage : BaseValidationPackage
{
    [DataMember]
    public int ClubId { get; set; }
}

因此,当我只是尝试测试这个或为我需要它的iOS人员演示它时,以下内容不会绑定:

的http:// [本地] / API /相遇/ GetInformation ClubId = 152

我应该将方法签名更改为此,那么一切正常:

public ReturnModel GetSomeInformation( int clubId) {...}

但不知何故,我的印象是我的第一个版本应该有效,而且我做错了,因为我认为webapi只是MVC的一个实现。

2 个答案:

答案 0 :(得分:1)

MVC(和Web API)简单类型(stringintGuid等)中的模型绑定的默认行为是从查询字符串绑定的。另一方面,对象将使用请求的主体进行绑定。您可以使用FromBodyAttributeFromUriAttribute(根据需要)在每个参数的基础上更改此行为:

public ReturnModel GetSomeInformation([FromUri]ValidationPackage validationPackage)
{
    return new ReturnModel();
}

答案 1 :(得分:1)

默认情况下,Web API会将查询字符串参数绑定到基本类型,并将主体内容请求复杂类型

模型绑定器期望请求体中有ValidationPackage个对象,但是您在查询字符串中传递了一个原语。

您可以将以下内容作为帖子正文:

{
  "ClubId": 152
}

如果您需要在查询字符串中传递它,则需要使用[FromUri]属性覆盖默认行为:

public ReturnModel GetSomeInformation([FromUri] ValidationPackage validationPackage)
{
    return new ReturnModel();
}

有关Web Api here的参数绑定功能的更多信息,您可以找到类似的问题here