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的一个实现。
默认情况下,Web API将查询字符串参数绑定到基元类型,并将请求正文内容绑定到复杂类型
模型绑定器期望在请求正文中有一个ValidationPackage
对象,但您在查询字符串中传递了一个基元。
你可以将以下内容作为你的帖子正文:
{
"ClubId": 152
}
如果需要在查询字符串中传递它,则需要使用[FromUri]
属性覆盖默认行为:
public ReturnModel GetSomeInformation([FromUri] ValidationPackage validationPackage)
{
return new ReturnModel();
}
这里有关于WebApi参数绑定功能的更多信息,您可以在这里找到类似的问题。
MVC(和Web API)简单类型(string
、int
、Guid
等…)中模型绑定的默认行为是从查询字符串绑定的。另一方面,对象将使用请求的Body进行绑定。您可以使用FromBodyAttribute
或FromUriAttribute
(取决于您的需要)在每个参数的基础上更改此行为:
public ReturnModel GetSomeInformation([FromUri]ValidationPackage validationPackage)
{
return new ReturnModel();
}