我们按如下方式调用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
值的密钥?
答案 0 :(得分:0)
作为一种临时解决方法,我们在调用null
之前循环浏览对象并删除任何值为$.ajax
的键: -
var data = ...;
for (i in data ) {
if (!data [i]) {
delete data [i];
}
}
$.ajax({
url: ...
type: 'POST'
data: data,
});
我仍然希望有一个更整洁的地方来处理这个问题。