C# WebApi不绑定(合理地)简单模型

C# WebApi不绑定(合理地)简单模型,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,冒着问noob问题的风险,我正在尝试测试一个url,以发布到一个webapi端点,它应该绑定模型,如果这个MVC: public ReturnModel GetSomeInformation( ValidationPackage validationPackage) { return new ReturnModel(); } 其中ValidationPackage类似于: public class ValidationPackage : BaseVali

冒着问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的一个实现。

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


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

模型绑定器在请求正文中需要一个
ValidationPackage
对象,但您正在查询字符串中传递一个原语

您可以将以下内容作为您的帖子主体:

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

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

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

是的,我已经尝试过了,但没有任何效果。。。澄清一下,我并不疯狂,一旦我做对了,它应该绑定到一个更复杂的对象?在我的测试中,一切都很好,但我真的想通过URL看到它的工作。。。我不想让调用这些的iOS开发人员担心,据我所知,如果您具有
[FromUri]
属性,那么ClubId就住在validationpackage中。如果你设置了一个断点,那么这个模型的结果是什么,它只是空的吗?我刚刚意识到我在其他地方做了一些愚蠢的事情,FromUri确实起作用了,我上次没有正确地调试它。。。谢谢你的帮助。。。
public ReturnModel GetSomeInformation([FromUri] ValidationPackage validationPackage)
{
    return new ReturnModel();
}