C#.NET Controller有害的Ascii转换

时间:2018-07-05 16:36:05

标签: .net ascii postman asp.net-core-2.0

好吧,我认为这是一个很奇怪的问题。我有一个控制器端点,如下所示:

    [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作为枚举构造为枚举,也许这将绕过该问题,现在看来很奇怪。

1 个答案:

答案 0 :(得分:1)

沉淀的0会将其解释为八进制,然后将其转换为十进制以绑定到int。如果需要包含0前缀,则需要将值作为字符串发送并手动将其解析为int。