簡體   English   中英

SyntaxError:JSON在位置0處出現意外令牌

[英]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開頭括號前面有三個字符: 0xEF0xBB0xBF 這些看起來是這樣在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM