首页 > 解决方案 > 邮递员将不正确的整数值传递给 API 控制器

问题描述

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

{ "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; }
}

它看起来像邮递员错误。

标签: restapiasp.net-web-apipostman

解决方案


以 0 为前缀的数字会将其解释为八进制数。

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

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

有关更多信息,请参阅此链接。


推荐阅读