好吧,我认为这是一个很奇怪的问题。我有一个控制器端点,如下所示:
[Route("CreateBox")]
[HttpPost]
public async Task<IActionResult> CreateBox([FromBody] CreateBoxCommand command)
{
var events = await _mediator.Send(command);
if (events != null)
{
await _mediator.Publish(events);
return Ok(events);
}
return BadRequest("Please check that WarehouseId is included in request");
}
和如下所示的CreateBoxCommand:
[DataContract]
public class CreateBoxCommand : IRequest<EventList>
{
[DataMember]
public int BoxType { get; set; }
[DataMember]
public int BoxContains { get; set; }
[DataMember]
public int Location { get; set; }
[DataMember]
public Guid WarehouseId { get; set; }
public CreateBoxCommand(int boxType, int boxContains, int location,
Guid warehouseId)
{
BoxType = boxType;
BoxContains = boxContains;
Location = location;
WarehouseId = warehouseId;
}
}
当我使用以下有效负载将邮件从邮递员发送到端点时,我的BoxType整数总是从0303整数值转换为195整数值!
有效载荷:
{
"WarehouseId": "7922126f-fef8-4d70-b7b4-398f2067c4aa",
"BoxType" : 0303,
"BoxContains" : 1,
"Location" : 0001
}
所有其他int值似乎都保留在请求中,但是在模型绑定期间逐步通过调试器,您可以看到0303已转换为195。我在代码库中的任何地方都没有195的引用或硬编码。
我在线上看到this ascii table引用0303 ascii为195十进制,我猜这是问题所在,但是到底为什么会进行这种转换?
有没有其他人通过POSTMAN或.NET Core 2经历过这种情况?
编辑:我一直在想最终还是将boxtype作为枚举构造为枚举,也许这将绕过该问题,现在看来很奇怪。
答案 0 :(得分:1)
沉淀的0
会将其解释为八进制,然后将其转换为十进制以绑定到int
。如果需要包含0
前缀,则需要将值作为字符串发送并手动将其解析为int。