Строка поста WebApi с нулем в начале

1

Мой первый пост после 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. Такое же поведение.

  • 0
    Ваш веб-сервис "обрезает" ведущие нули. вы можете попробовать заменить их на '& nbsp;' (неразрывный пробел) и сделать обратные манипуляции на вашем сервере
  • 0
    Используйте Fiddler, чтобы увидеть, что на самом деле отправляется службе, не думайте, что WebAPI решил рассматривать ваши данные как целое число. Возможно, jqGrid решил отправить идентификатор в виде целого числа, когда сериализовал postData в json.
Показать ещё 1 комментарий
Теги:
asp.net-web-api
jqgrid

1 ответ

1
Лучший ответ

Мне кажется, что причиной проблемы является неправильная сериализация строки JSON. Вы используете postData: "000951003684". Таким образом, тело запроса будет

000951003684

который не соответствует входной строке JSON "000951003684". Единственные возможные правильные входные данные JSON могут быть целыми (число). Чтобы сериализовать данные как строку, вы должны добавить

serializeGridData: function (postData) {
    return JSON.stringify(postData);
}

или изменить postData: "000951003684" на

postData: JSON.stringify("000951003684")

или просто использовать

postData: "\"000951003684\""

Во всех случаях данные в теле будут выглядеть так:

"000951003684"

который можно десериализовать как строку JSON.

  • 0
    Большой! Спасибо за это. Все еще довольно странно, что WebApi не заботится о «строке» типа данных в сигнатуре функции и просто пытается найти возможный тип данных ...
  • 0
    @ Хруст: Добро пожаловать!
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню