2013-09-27 1 views
0

Мы ссылающегося контроллер веб-API следующим образом: -Web API deserialising Аякса размещены нулевые значения, как «нулевой» строка

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

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

Когда данные deserialised на сервере в нашей модели: -

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.

Есть ли способ иметь веб-api для привязки null, а не "null" к Foo?

С другой стороны, есть способ, чтобы иметь JQuery опустить ключ для любого null значения из data переданного $.ajax?

+0

Какая модель выполняет действие вашего контроллера как параметр и как оно выглядит как подпись? –

+0

Почему бы просто не оставить объекты, которые вы хотите «пустым»? –

+0

Объект генерируется в другом месте, а свойство не всегда равно null. –

ответ

0

В качестве временного решения, мы пробегаем через объект и удалить любой ключ, значение которого null перед вызовом $.ajax: -

var data = ...; 

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

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

я все еще надеюсь, что есть опрятнее место, чтобы справиться с этим, хоть.

Смежные вопросы