我有一个post方法接受包含decimal属性的对象,如下所示
[HttpPost]
public async Task<IActionResult> Create(CreateDto createDto)
{
...do stuff here
}
public class CreateDto
{
[Required]
public string Id{ get; set; }
[Required]
public decimal? Rate{ get; set; }
}
当包含前导0的值传入Rate字段时,例如:0015,它总是以10为单位。
如果有人能够解释这种现象,我将不胜感激。
答案 0 :(得分:0)
问题在于aspnet核心mvc JSON解析器,该解析器允许在数字之前的前导零处于[0-7]范围内,并将它们视为八进制,以匹配在javascript中使用eval获得的结果类型。
这种行为与http://json.org中所述的行会线相矛盾:
“除了八进制之外,数字非常类似于C或Java编号 不使用和十六进制格式。“
并且语法图不允许数字具有前导非重要零。
RFC 4627第2.4节。同意:
“不允许使用八进制和十六进制表格。不允许使用前导零。”
简而言之,唯一的方法是使用正确实现Json规范的JSON解析器。
参考:Override Json deserializing a number with a leading zero as a decimal and not an octal value