【问题标题】:WebApi post string with leading zero带前导零的 WebApi 帖子字符串
【发布时间】:2014-11-17 09:25:38
【问题描述】:

我 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 发送相同的请求。相同的行为。

【问题讨论】:

  • 您的网络服务“切断”前导零。您可能想尝试用 ' ' 替换它们(不间断空间)并在您的服务器上进行反向操作
  • 使用 Fiddler 查看实际发送到服务的内容,不要假设 WebAPI 决定将您的数据视为整数。可能是jqGrid在将postData序列化为json时决定将id作为整数发送。
  • @Crunch NULL 表示 body 未被识别为 Json,而不是 WebAPI 认为它是一个整数。

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


【解决方案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 字符串。

【讨论】:

  • 太棒了!谢谢。仍然很奇怪,WebApi 不关心函数签名中的数据类型“字符串”,只是试图找到可能的数据类型......
  • 现在这很奇怪,012345 被接受但 099345 没有约束力,为 null !有什么线索吗?
  • @sajanyamaha:我不明白你的问题。 ,,012345 是什么意思?你具体做什么?你用什么代码?您是否验证了您在 HTTP 请求的正文中发送的是字符串而不是数字?
  • @Oleg 这是我的代码方法,PaymentTime([FromBody] string hostOtp),现在当 012345 被传递时,MVC 绑定有效,当 099543 被传递时它为 null!
  • @sajanyamaha:我在旧答案中描述了如何将字符串 "099543" 而不是数字 099543 发送到 Web 方法。您使用哪个 JavaScript 代码?您是否针对 Chrome/IE 的开发人员工具验证了哪些数据现在将您的客户端发送到服务器?数据应包含引号。
猜你喜欢
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2019-12-03
相关资源
最近更新 更多