2017-02-14 2 views
0

Я получал эту проблему при доступе к службе REST, предоставляемой .NET-WCF из модуля узла javascript, используя whatwg-fetch npm.SyntaxError: Неожиданный токен в JSON в позиции 0

Обратите внимание, что приведенное выше сообщение об ошибке относится к неожиданному токену, который кажется белым.

Поскольку я не мог понять, что это такое, я потратил много времени на рассмотрение других возможных эзотерических проблем, таких как CORS, аутентификация, смешивание обещаний из API-интерфейса fetch.

ответ

1

Причина этого было то, что службы WCF REST создавали ответ через этот призыв:

return WebOperationContext.Current.CreateTextResponse(
    json, 
    "application/json; charset=utf-8", 
    Encoding.UTF8 
); 

Оказывается, что когда Microsoft реализовала Encoding.UTF8 кодирование они выбрали, чтобы сделать его предварять строку JSON с маркер спецификации UTF. В результате передняя скоба JSON имеет перед собой три символа: 0xEF, 0xBB, 0xBF. Они выглядят так: , если смотреть в ISO-8859-1 или CP1252.

В этом случае я действительно должен был доверять сообщению об ошибке, но всего за день до того, как я начал добавлять аутентификацию, я получил сообщения от других, говорящих, что служба REST действительно работает. Затем я начал добавлять пропущенные тесты, а также добавлял аутентификацию. Именно на этом этапе я понял, что все тесты потерпели неудачу. И - backtracking на самом деле не помогло ...

В качестве примечания: кажется, что, когда код работает в браузере, он более прост в отношении маркеров спецификации. При выполнении тестов в узле, однако это, кажется, намного более разборчивы ...

Решение было заставить 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 
); 
Смежные вопросы