冒着问一个菜鸟问题的风险,我正在尝试测试一个网址,以便向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的一个实现。
答案 0 :(得分:1)
MVC(和Web API)简单类型(string
,int
,Guid
等)中的模型绑定的默认行为是从查询字符串绑定的。另一方面,对象将使用请求的主体进行绑定。您可以使用FromBodyAttribute
或FromUriAttribute
(根据需要)在每个参数的基础上更改此行为:
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();
}