我在邮递员身上发现了一个奇怪的问题。在下面的请求数量是整数字段。
{ "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; }
}
看起来像邮差错误。
答案 0 :(得分:4)
将数字前缀为0会使其被解释为八进制数。
八进制数语法使用前导零。如果0后的数字超出0到7的范围,则该数字将被解释为十进制数。
var n = 0755; // 493
var m = 0644; // 420
有关详细信息,请参阅this link.
答案 1 :(得分:1)
This answer表示前导零在JavaScript中定义八进制数 - 或基数8。因此,序列化器会根据标准正确解释您传递的内容。
前导零对十进制整数没有意义,所以如果你需要保持零 - 我不知道你怎么可能,如果你的模型有整数属性 - 那么把它变成一个字符串。但这里没有不正确的行为。