Asp.net web api Webapi模型绑定器不构造复杂类型?

Asp.net web api Webapi模型绑定器不构造复杂类型?,asp.net-web-api,Asp.net Web Api,我有以下api操作: [Route("~/api/products/{productCode}/price")] public IHttpActionResult PutProductPrice(string productCode, PriceBindingModel binding) { 当我向该端点发送请求时,没有如下请求主体: Accept: application/json Content-Type: application/json Content-Length: 0 在Put

我有以下api操作:

[Route("~/api/products/{productCode}/price")]
public IHttpActionResult PutProductPrice(string productCode, 
PriceBindingModel binding) {
当我向该端点发送请求时,没有如下请求主体:

Accept: application/json
Content-Type: application/json
Content-Length: 0
在PutProductPrice绑定的主体中,绑定为null。(与MVC不同)

我习惯于建模绑定器使用其默认的无参数构造函数创建PriceBindingModel并分配值(在本例中没有)

这应该是行为吗?我应该在所有api请求中检查模型是否为null吗? 我想这是一个bug或者其他一些我没有看到的问题

注意:在请求上发送{}(空对象),将创建BindingModel,并获得预期的错误请求,但modelstate失败。(我认为在第一个场景中也应该发生(发送一个空的尸体)

注2:在控制器的第一行执行此操作,使其按预期工作:

binding = binding ?? new PriceBindingModel();

想法?

你最终做了什么?我相信应该可以覆盖模型绑定器来“修复”这个问题,但我很想知道你是否想出了更简单的方法。我只是添加了
if(binding==null)return BadRequest();
似乎是合理的,只要
PriceBindingModel
有一个或多个必需的属性。我想我可能必须重写模型绑定器(或使用in-fix方法)在我的例子中,模型没有必需的属性。感谢您的快速回复。@JørnSchou Rode您可以使用像Ben Foster创建的那样的操作筛选器:我不确定这是否相关。我想做的是,使用
新的MyModelClass()调用我的操作当请求不包含任何模型属性时,
作为参数,而不是
null
。在我的特殊情况下,它是一个GET请求,并且参数被标记为
[FromUri]
,因此它与您拥有的略有不同,尽管我相信
null
值的来源是相同的。