2017-02-14 122 views
0

我在使用whatwg-fetch npm從JavaScript節點模塊訪問.Net WCF提供的REST服務時遇到此問題。SyntaxError:位置0的JSON中的意外令牌

請注意,上面的錯誤消息引用了一個似乎是空白的意外標記。

由於我無法弄清楚這是什麼,我花了很多時間考慮其他可能的深奧問題,如CORS,身份驗證,從提取API ++混合Promises。

回答

1

原因這是,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 
); 
相關問題