Web API反序列化ajax将空值发布为“null”字符串

时间:2013-09-27 11:49:12

标签: jquery asp.net-web-api

我们按如下方式调用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值的密钥?

1 个答案:

答案 0 :(得分:0)

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

var data = ...;

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

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

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