我在使用whatwg-fetch npm從JavaScript節點模塊訪問.Net WCF提供的REST服務時遇到此問題。SyntaxError:位置0的JSON中的意外令牌
請注意,上面的錯誤消息引用了一個似乎是空白的意外標記。
由於我無法弄清楚這是什麼,我花了很多時間考慮其他可能的深奧問題,如CORS,身份驗證,從提取API ++混合Promises。
我在使用whatwg-fetch npm從JavaScript節點模塊訪問.Net WCF提供的REST服務時遇到此問題。SyntaxError:位置0的JSON中的意外令牌
請注意,上面的錯誤消息引用了一個似乎是空白的意外標記。
由於我無法弄清楚這是什麼,我花了很多時間考慮其他可能的深奧問題,如CORS,身份驗證,從提取API ++混合Promises。
原因這是,WCF REST服務是創造通過該呼叫的響應:
return WebOperationContext.Current.CreateTextResponse(
json,
"application/json; charset=utf-8",
Encoding.UTF8
);
原來,當微軟實施的Encoding.UTF8
編碼,他們選擇了把它前面加上了JSON字符串一個UTF BOM標記。結果是JSON開放大括號前面有三個字符: 0xEF
,0xBB
,。在ISO-8859-1或CP1252中查看時,這些看起來像
。
在這種情況下,我真的應該信任錯誤消息,但就在我開始添加身份驗證的前一天,我從其他人那裏得到了報告,說REST服務確實正在工作。然後我開始添加迄今爲止缺少的測試 - 同時還添加了身份驗證。正是在這個階段,我意識到所有的測試都失敗了。並且 - 回溯並沒有真正的幫助...
作爲一個側面說明:看起來,代碼在瀏覽器中運行時,它對BOM標記更爲寬容。當運行在節點測試但它似乎多了很多挑剔......
解決方案是迫使BOM標記關閉編碼,就像這樣:
// Note, false to avoid BOM marker which breaks some clients not expecting BOM for utf-8
var utf8 = new UTF8Encoding(false);
return WebOperationContext.Current.CreateTextResponse(
json,
"application/json; charset=utf-8",
utf8
);