我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发送相同的请求。同样的行为。
答案 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字符串。