Почтальон передает неверное целочисленное значение в контроллер API - PullRequest
0 голосов
/ 13 июня 2018

Я нашел одну странную проблему в почтальоне.В приведенной ниже сумме запроса указано целое поле.

{ "merchantId": 49, "amount": 020 }

Когда я передаю сумму 020 вместо 20. В контроллере API я получил сумму 16. Когда я передаю 0100, я получаю 64.

Если япередайте в двойных кавычках как "020" или "0100".Затем я получаю 20 и 100.

Ниже приведен метод контроллера и класс запроса:

    [HttpPost]
    public IHttpActionResult Post(XXXXXXXXCommand command)
    {
        IHttpActionResult result = null;

        using (_logger.PushWeb())
        {
            _logger.Info("POST request to /transactions/debits/accountsetup", command);
            try
            {

            }

            catch (MerchantNotFoundException ex)
            {
                _logger.Error("XXXX", ex);


            }

        }
        return result;
    }


[DataContract(Name = "XXXXCommand")]
public class XXXXXXCommand : CommandBase
{
    /// <summary>
    /// Merchant ID 
    /// </summary>
    [DataMember(Name = "merchantId", Order = 1)]
    public int MerchantId { get; set; }

    /// <summary>
    /// Transaction amount
    /// </summary>
    [DataMember(Name = "amount", Order = 2)]
    public int Amount { get; set; }
}

Похоже, ошибка почтальона.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Префикс числа с 0 делает его восьмеричным как восьмеричное число.

В синтаксисе восьмеричного числа используется начальный ноль.Если цифры после 0 находятся вне диапазона от 0 до 7, число будет интерпретировано как десятичное число.

var n = 0755; // 493
var m = 0644; // 420

Для получения дополнительной информации см. эту ссылку.

0 голосов
/ 13 июня 2018

Этот ответ указывает, что начальный ноль определяет восьмеричное число - или основание 8 - в JavaScript.Таким образом, сериализатор правильно интерпретирует то, что вы передаете, в соответствии со стандартом.

Начальные нули не имеют значения для десятичных целых чисел, поэтому, если вам нужно сохранить ноль - я не могу понять, как вы могли быЕсли ваша модель имеет целочисленные свойства - сделайте ее строкой.Но здесь нет неправильного поведения.

...