0

我们正在调用一个 web-api 控制器,如下所示:-

var foo = ...; // may be null.
...

var data = { Foo: foo, ... };
$.ajax({
    url: ...
    type: 'POST'
    data: data,
    });

当数据在服务器上反序列化到我们的模型中时:-

public class BarController : ApiController
{
  public void Post(Bar bar)
  {
    ...
  }
}

public class Bar
{
  public string Foo { get; set; }
  ...
}

该值"null"被绑定到Foo而不是null.

出于商业原因,我们使用www-form-urlencoded内容类型而不是 JSON 很重要。

替换内置似乎不可行,FormUrlEncodedMediaTypeFormatter因为它依赖于许多内部类(特别是,它实例化了一个FormUrlEncodedParser,并且似乎没有挂钩来扩展其行为)。

问题似乎FormUrlEncodedParser是将输入解释为"null"而不是null.

有没有办法让 web api 绑定null而不是"null"Foo?

或者,有没有办法让 jquery 省略传递给的任何null值的键?data$.ajax

4

1 回答 1

0

作为一种临时解决方法,我们遍历对象并删除其值null在我们调用之前的任何键$.ajax:-

var data = ...;

for (i in data ) {
    if (!data [i]) {
        delete data [i];
    }
}

$.ajax({
    url: ...
    type: 'POST'
    data: data,
    });

不过,我仍然希望有一个更整洁的地方来处理这个问题。

于 2013-09-27T12:08:51.537 回答