SyntaxError:位于0的JSON中的意外标记

时间:2017-02-14 05:17:39

标签: javascript c# json wcf

我在使用whatwg-fetch npm从javascript节点模块访问.Net WCF提供的REST服务时遇到此问题。

请注意,上面的错误消息指的是一个看似空白的意外标记。

由于我无法弄清楚这是什么,我花了很多时间考虑其他可能的深奥问题,如CORS,身份验证,混合来自fetch API ++的Promises。

1 个答案:

答案 0 :(得分:1)

原因是WCF REST服务通过此调用创建响应:

<pre></pre>

事实证明,当微软实施return WebOperationContext.Current.CreateTextResponse( json, "application/json; charset=utf-8", Encoding.UTF8 ); 编码时,他们选择使用UTF BOM标记作为json字符串。结果是JSON左大括号前面有三个字符: Encoding.UTF80xEF0xBB。在ISO-8859-1或CP1252中查看时,它们看起来像0xBF

在这种情况下,我真的应该信任错误消息,但就在我开始添加身份验证的前一天,我收到了其他人的报告,说REST服务确实正在运行。然后我开始添加到目前为止缺少的测试 - 同时还添加了身份验证。在这个阶段,我意识到所有测试都失败了。并且 - 回溯并没有真正帮助......

作为旁注:似乎当代码在浏览器中运行时,它对BOM标记更加宽容。在节点中运行测试时,它似乎更挑剔......

解决方案是强制关闭BOM标记,如下所示: