Мой первый пост после 2 лет. На все мои вопросы был дан ответ - до сих пор.
Я работаю с ASP.NET WebApi 2. Я отправляю строку с ведущими нулями. например, через jqgrid:
myGrid = $("#myGrid").jqGrid({
url: 'api/Customer',
datatype: "json",
ajaxGridOptions: { contentType: "application/json" },
mtype: "POST",
postData: "000951003684"
});
ApiController Похож:
public class CustomerController : ApiController
{
[HttpPost]
public void Post([FromBody]string customerNumber)
{
if (!string.IsNullOrEmpty(customerNumber))
{
factory.CreateDbService().GetCustomer(customerNumber);
}
}
}
Проблема заключается в том, что "customerNumber" имеет значение "951003684", а не "000951003684", как ожидалось. По-моему, это странно, потому что функция ожидает, что строка не будет целочисленной. Похоже, что WebApi использует целочисленный форматтер, хотя функция ожидает строковое значение. На самом деле нет необходимости использовать целочисленный форматтер.
Кто-нибудь знает, как получить доступ ко всей строке с ведущими нулями? Или другими словами: Как настроить WebApi так, чтобы ведущие нули не были вырезаны?
EDIT: теперь я уверен, что WebApi использует целочисленный форматтер, потому что, если я передаю строку (например, "hallo World"), моя переменная "customerNumber" имеет значение NULL
Я уже пытался отправить тот же запрос из RESTClient-инструмента Firefox. Такое же поведение.
Мне кажется, что причиной проблемы является неправильная сериализация строки JSON. Вы используете postData: "000951003684"
. Таким образом, тело запроса будет
000951003684
который не соответствует входной строке JSON "000951003684"
. Единственные возможные правильные входные данные JSON могут быть целыми (число). Чтобы сериализовать данные как строку, вы должны добавить
serializeGridData: function (postData) {
return JSON.stringify(postData);
}
или изменить postData: "000951003684"
на
postData: JSON.stringify("000951003684")
или просто использовать
postData: "\"000951003684\""
Во всех случаях данные в теле будут выглядеть так:
"000951003684"
который можно десериализовать как строку JSON.
postData
в json.