rest - 邮递员将不正确的整数值传递给 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; }
}
它看起来像邮递员错误。
解决方案
以 0 为前缀的数字会将其解释为八进制数。
八进制数语法使用前导零。如果 0 之后的数字超出 0 到 7 的范围,则该数字将被解释为十进制数。
var n = 0755; // 493
var m = 0644; // 420
有关更多信息,请参阅此链接。
推荐阅读
- c# - Doxygen 不适用于 C# 中的二维数组
- ios - iOS 二进制未加密测试飞行构建
- azure - 如何在 Azure Synapse 中创建通用数据流
- javascript - 借助 RegEx 在 JavaScript 中获取不带格式标记的字符串
- python-3.x - 从 OpenCV 中的 DMatch 列表中获取位置和旋转信息?
- solidity - IUniswapV2Router02.swapExactTokensForTokens 在智能合约中失败
- java - Windows 上的 HEC HMS 和 GDAL 配置
- python - 对整个数据框的 Python Pandas 条件操作
- c++ - Mifare 1K 分两块写入数据
- python - Python:如何用另一个 csv 文件列替换一次 csv 文件列?