【问题标题】:Unable to pass a value which contains %45 to a REST API无法将包含 %45 的值传递给 REST API
【发布时间】:2016-11-30 05:22:23
【问题描述】:

我在 ASP.NET MVC 5 应用程序中遇到问题。

我将以下 JSON 传递给第三方 API,其中包括密码值:-

"{\"operation\":{\"Details\":{\"RESOURCENAME\":\"123\",\"ACCOUNTNAME\":\"test45\",\"PASSWORD\":\"123%456t\",\"createAccount\":{\"operation\":{\"Details\":{\"ACCOUNTLIST\":[]}}}}"

现在的问题是,在第 3 方系统中,API 会将密码 123%456t 保存为 123E6t

有人可以就此提出建议吗?这是 3rd 方 API 内部的问题,还是我需要自己处理的问题?

【问题讨论】:

    标签: c# html asp.net json json.net


    【解决方案1】:

    这绝对是服务器端的问题。百分号是not a special character in JSON

    使用 JSON.NET 反序列化 JSON 会产生预期结果:123%456t

    我认为他们在整个或部分 JSON 上调用 HttpUtility.UrlDecode 或类似名称,因为这会产生 123E6t

    【讨论】:

    • 那么,作为一种前瞻性的预防措施,你会说尝试UrlEncode() JSON,从而抵消可能的UrlDecode 另一端吗?
    • 这听起来很危险,但如果他们不合作,也值得一试。
    • 注明。只是出于兴趣,我猜 Newtonsoft 的 JsonConvert 会输出相同的结果?
    • 如前所述“是的,我愿意。@johnG 你的 JSON 看起来不错。你确定你自己不包装它吗?”
    • @johnG - 我应该想象这个问题是在第 3 方 API 结束时引起的,就像帕特里克已经指出的那样 - 在这个答案中提到了这种可能性,可能值得尝试 @987654328 @ 看看它是否解决了问题 - 如果是这样,你知道第三方是 UrlDecode()ing 字符串的另一端。然而,这不是一个好的做法。最好的解决方案是与从事 API 工作的开发人员交谈,了解他们的建议等。
    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 2012-01-23
    • 2011-05-20
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多