[英]SyntaxError: Unexpected token in JSON at position 0
使用whatwg-fetch npm從javascript節點模塊訪問.Net WCF提供的REST服務時遇到了這個問題。
請注意,上面的錯誤消息指的是一個看起來像空白的意外令牌。
由於我不知道這是什么,因此我花了很多時間考慮其他可能深奧的問題,例如CORS,身份驗證,將提取的API ++中的Promises混合在一起。
原因是WCF REST服務正在通過此調用創建響應:
return WebOperationContext.Current.CreateTextResponse(
json,
"application/json; charset=utf-8",
Encoding.UTF8
);
事實證明,當Microsoft實現Encoding.UTF8
編碼時,他們選擇使它在json字符串前添加UTF BOM標記。 結果是JSON開頭括號前面有三個字符: 0xEF
, 0xBB
, 0xBF
。 這些看起來是這樣
在ISO 8859或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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.