邮递员将不正确的整数值传递给API控制器

时间:2018-06-13 06:29:51

标签: rest api asp.net-web-api postman

我在邮递员身上发现了一个奇怪的问题。在下面的请求数量是整数字段。

{ "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 :(得分:4)

将数字前缀为0会使其被解释为八进制数。

八进制数语法使用前导零。如果0后的数字超出0到7的范围,则该数字将被解释为十进制数。

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

有关详细信息,请参阅this link.

答案 1 :(得分:1)

This answer表示前导零在JavaScript中定义八进制数 - 或基数8。因此,序列化器会根据标准正确解释您传递的内容。

前导零对十进制整数没有意义,所以如果你需要保持零 - 我不知道你怎么可能,如果你的模型有整数属性 - 那么把它变成一个字符串。但这里没有不正确的行为。