C# ASP.NET Web API ModelState不包含所有参数,验证无效

C# ASP.NET Web API ModelState不包含所有参数,验证无效,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我正在使用ASP.NET Web API,我在controller中有以下POST方法: [Route("Order/{siteId}/{orderId}")] public HttpResponseMessage Post(long siteId, long orderId, OrderInformation orderInfo) { if (ModelState.IsValid) { ... } } 我在OrderInformation类中有几个数据注释(必需的等等),但不幸的是验

我正在使用ASP.NET Web API,我在controller中有以下POST方法:

[Route("Order/{siteId}/{orderId}")]
public HttpResponseMessage Post(long siteId, long orderId, OrderInformation orderInfo)
{
    if (ModelState.IsValid) { ... }
}
我在OrderInformation类中有几个数据注释(必需的等等),但不幸的是验证不起作用。这是因为ModelState不包含orderInfo的键。它只包含siteId和orderId

所以我的问题是为什么orderInfo参数不包含在ModelState中。我不知道为什么它工作得这么奇怪,因为我在不同的地方使用了类似的代码,而且工作得很好

编辑:

以下是模型(OrderInformation类):

编辑2:

我正在发送序列化为JSON的复杂类型。我还尝试了以下方法的签名:

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

您不应该在url中传递复杂对象。从请求主体获取orderinfo

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

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

您不应该在url中传递复杂的对象。从请求主体获取orderinfo

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

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

Uff我刚刚找到了问题所在。模型中不能有公共字段,必须是属性。

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

要知道为什么模型没有传递回动作,我们需要查看模型,更重要的是查看视图,而不是动作。@Coda17我添加了模型类。它是Web API,所以没有视图要知道为什么您的模型没有传递回操作,我们需要查看模型,更重要的是查看视图,而不是操作。@Coda17我添加了模型类。这是Web API,所以没有视图。谢谢回复。我是这样做的。我正在请求体中发送JSON数据。我也尝试了两个选项,有FromBody属性和没有FromBody属性,但都不起作用。如果从主体发送,请确保保留[FromBody]标记,并且当它为空时,95%的时间是Json语法,因此请检查是否正确发送对象。摆弄json对象。提示:您可以使用此免费工具轻松地测试请求:同时尽量使dto(模型)尽可能简单。移除[所需]标签。把它缩小到最简单的形式,看看你是否能用这种方式工作。谢谢你的回复。我是这样做的。我正在请求体中发送JSON数据。我也尝试了两个选项,有FromBody属性和没有FromBody属性,但都不起作用。如果从主体发送,请确保保留[FromBody]标记,并且当它为空时,95%的时间是Json语法,因此请检查是否正确发送对象。摆弄json对象。提示:您可以使用此免费工具轻松地测试请求:同时尽量使dto(模型)尽可能简单。移除[所需]标签。把它缩小到最简单的形式,看看你是否能用这种方式工作。