WebApi没有绑定到(合理的)简单模型

本文关键字:简单 模型 绑定 WebApi | 更新日期: 2023-09-27 18:26:33

冒着问noob问题的风险,我试图测试一个url,以发布到它应该绑定模型的webapi端点,如果是这样的MVC:

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

其中ValidationPackage类似于:

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

因此,当我只是尝试测试它或为我的iOS用户演示它时,以下内容不适用:

http://local]/api/meet/GetInformation?ClubId=152

如果我把方法签名改成这个,那么一切都很好:

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

但不知怎么的,我觉得我的第一个版本应该可以工作,我做错了什么,因为我觉得webapi只是MVC的一个实现。

WebApi没有绑定到(合理的)简单模型

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

模型绑定器期望在请求正文中有一个ValidationPackage对象,但您在查询字符串中传递了一个基元。

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

{
  "ClubId": 152
}

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

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

这里有关于WebApi参数绑定功能的更多信息,您可以在这里找到类似的问题。

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

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