ASP.NET Web API ModelState不包含所有参数,验证不起作用

时间:2014-06-20 14:24:56

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

我正在使用ASP.NET Web API,我在控制器中有这个POST方法:

[Route("Order/{siteId}/{orderId}")]
public HttpResponseMessage Post(long siteId, long orderId, OrderInformation orderInfo)
{
    if (ModelState.IsValid) { ... }
}

我在OrderInformation类中有几个数据注释(必需等),但不幸的是验证不起作用。这是因为ModelState不包含orderInfo的键。它只包含siteId和orderId。

enter image description here

所以我的问题是为什么orderInfo参数不包含在ModelState中。我不知道为什么它的工作原理如此奇怪,因为我在不同的地方使用类似的代码并且工作正常。

编辑:

这是模型(OrderInformation类):

public class tOrderInformation
{

    [Required]
    public string LoyaltyNumber;
    [Required]
    public string SpecialInstructions;
    public bool SendEmail;

    ...
    // few more string properties, no data annotations
}

编辑2:

我发送序列化为JSON的复杂类型。我也尝试过这种方法签名:

[Route("Order/{siteId}/{orderId}")]
public HttpResponseMessage Post(long siteId, long orderId, [FromBody] OrderInformation orderInfo)

2 个答案:

答案 0 :(得分:4)

我刚刚发现了什么问题。模型中不能有公共字段,它必须是属性。

答案 1 :(得分:1)

你不应该在网址中传递复杂的对象。从请求正文中获取orderinfo

[Route("Order/{siteId}/{orderId}")]
public HttpResponseMessage Post(long siteId, long orderId, [FromBody]OrderInformation orderInfo)
{
    if (ModelState.IsValid) { ... }
}

使用json发送对象。这样它就不应该为空。