Web Api发布字符串,前导零

时间:2014-11-17 09:25:39

标签: c# asp.net asp.net-web-api jqgrid

我2年后的第一篇文章。我的所有问题都得到了回答 - 直到现在。

我正在使用ASP.NET WebApi 2.我发送一个带有前导零的字符串。例如通过jqgrid:

myGrid = $("#myGrid").jqGrid({
    url: 'api/Customer',
    datatype: "json",
    ajaxGridOptions: { contentType: "application/json" },
    mtype: "POST",
    postData: "000951003684"
});

ApiController看起来像:

public class CustomerController : ApiController
{
    [HttpPost]
    public void Post([FromBody]string customerNumber)
    {
        if (!string.IsNullOrEmpty(customerNumber))
        {
            factory.CreateDbService().GetCustomer(customerNumber);
        }
    }
}

问题在于" customerNumber"有价值" 951003684"而不是" 000951003684"正如所料。 在我看来,它很奇怪,因为函数需要一个字符串而不是一个整数值。 似乎WebApi使用整数格式化程序,尽管该函数需要字符串值。实际上不需要使用整数格式化程序。

有人知道如何使用前导零访问整个字符串吗? 或者换句话说:如何配置WebApi,以便不切断前导零?

编辑: 现在我确定WebApi使用整数格式化器,因为如果我传递一个字符串(例如" hallo World")我的变量" customerNumber"是 NULL

我已经尝试从Firefox RESTClient-Tool发送相同的请求。同样的行为。

1 个答案:

答案 0 :(得分:1)

在我看来,问题的原因是字符串的JSON序列化错误。您使用postData: "000951003684"。所以请求的主体只是

000951003684

与输入JSON字符串"000951003684"不对应。唯一可能的正确输入JSON数据可以是整数(数字)。要将数据序列化为字符串,您必须添加

serializeGridData: function (postData) {
    return JSON.stringify(postData);
}

或将postData: "000951003684"更改为

postData: JSON.stringify("000951003684")

或只是使用

postData: "\"000951003684\""

在所有情况下,正文中的数据都会显示为

"000951003684"

可以反序列化为JSON字符串。