我正在使用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。
所以我的问题是为什么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)
答案 0 :(得分:4)
我刚刚发现了什么问题。模型中不能有公共字段,它必须是属性。
答案 1 :(得分:1)
你不应该在网址中传递复杂的对象。从请求正文中获取orderinfo
[Route("Order/{siteId}/{orderId}")]
public HttpResponseMessage Post(long siteId, long orderId, [FromBody]OrderInformation orderInfo)
{
if (ModelState.IsValid) { ... }
}
使用json发送对象。这样它就不应该为空。