C# 带前导零的WebApi post字符串

C# 带前导零的WebApi post字符串,c#,asp.net,asp.net-web-api,jqgrid,C#,Asp.net,Asp.net Web Api,Jqgrid,我两年后的第一个职位。我所有的问题都得到了回答——直到现在 我正在使用ASP.NET WebApi 2。我正在发送一个带前导零的字符串。e、 g.通过jqgrid: myGrid = $("#myGrid").jqGrid({ url: 'api/Customer', datatype: "json", ajaxGridOptions: { contentType: "application/json" }, mtype: "POST", postData

我两年后的第一个职位。我所有的问题都得到了回答——直到现在

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

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

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”是空的


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

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

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

序列化GridData:函数(postData){ 返回JSON.stringify(postData); } 或者将
postData:“000951003684”
更改为

postData:JSON.stringify(“000951003684”)
或者只是使用

postData:“000951003684”
在所有情况下,正文中的数据看起来都是

“000951003684”

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

您的web服务“切断”前导零。您可能希望尝试将它们替换为“”(不间断空格),并在服务器上执行反向操作。请使用Fiddler查看实际发送到服务的内容,不要假设WebAPI决定将数据视为整数。可能是jqGrid在将
postData
序列化为json时决定将id作为整数发送。@Crunch NULL表示主体未被识别为json,而不是WebAPI认为它是整数。太好了!谢谢。仍然很奇怪,WebApi不关心函数签名中的数据类型“string”,只是试图找到一个可能的数据类型…现在这很奇怪,012345被接受,但099345没有绑定,为空!有什么线索吗?@sajanyamaha:我不明白你的问题。你说的
,.012345
是什么意思?你到底在做什么?你用什么代码?您是否验证了您发送的是字符串而不是HTTP请求正文中的数字?@Oleg这是我的代码方法PaymentTime([FromBody]string hostOtp),现在当通过012345时,MVC绑定工作,当通过099543时,它是空的@sajanyamaha:我在以前的回答中描述了如何将字符串
“099543”
而不是数字
099543
发送到Web方法。您使用哪种JavaScript代码?您是否验证了Chrome/IE的开发者工具,现在哪些数据将您的客户端发送到服务器?数据应该包含引号。