ListData.svc со сложными фильтрами, Internet Explorer, 400 Bad HTTP-запрос,
-
10-12-2019 - |
Вопрос
У меня проблемы с пониманием того, как ListData.svc
можно отлаживать с помощью IE8 и IE9.
У меня есть URL-адрес, который выглядит следующим образом:hostname:8181/_vti_bin/listdata.svc/ImageBanners?$filter=endswith(Path,'TopLeft')
и показать уравнение true
Когда я пытаюсь получить к нему доступ с помощью IE8 с автономного сервера SharePoint, я получаю ошибку 400.
Когда я запрашиваю тот же URL-адрес с помощью Firefox, он работает нормально.
Более того hostname:8181/_vti_bin/listdata.svc/ImageBanners
работает как надо даже в IE.Так что проблема видимо в $filter=endswith
часть.
Однако.Когда я запрашиваю тот же URL-адрес в IE8, используя IP-адрес сервера или локальный хост, я получаю правильные результаты даже при использовании сложных фильтров.
Может кто-нибудь, пожалуйста, пролить свет на эту тайну?Почему у меня такое поведение?
Дополнительная информация:
- У SharePoint установлена русская и английская версия.
- Приложение SharePoint использует проверку подлинности NTLM.
- Анонимная аутентификация в IIS отключена.
Fiddler показывает, что каждый ресурс запрашивается дважды.В первый раз сервер возвращает 401, а затем 200 или 400 в зависимости от браузера и URL-адреса (подробности см. выше).
- Когда я получаю доступ
ListData.svc
использование правильного HTTP-запроса Firefox выглядит следующим образом:
Принимать:текст/html, приложение/xhtml+xml, /
Принять-Язык:ru-US
Пользователь-Агент:Mozilla/5.0 (совместим;МСИЕ 9.0;Windows НТ 6.1;ВАУ64;Трезубец/5.0)
Принять-кодирование:gzip, сдуть
Связь:Keep-Alive
Файл cookie:WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Хозяин:локальный хост: 8181
Авторизация:NTLM TlRMTVNTU...- При использовании HTTP-запроса IE8 выглядит так (обратите внимание
lcid=1049
.может в этом проблема?):
Принимать:изображение/jpeg, изображение/gif, изображение/pjpeg, приложение/x-ms-приложение, приложение/xaml+xml, приложение/x-ms-xbap, /
Принять-Язык:ru-US
Пользователь-Агент:Mozilla/4.0 (совместим;МСИЭ 7.0;Windows НТ 6.1;ВАУ64;Трайдент/5.0;SLCC2;.NET CLR 2.0.50727;.NET4.0C;.NET4.0E;.NET CLR 3.5.30729;.NET CLR 3.0.30729;ИнфоПат.3)
Принять-кодирование:gzip, сдуть
Связь:Keep-Alive
Файл cookie:лцид=1049;WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Авторизация:NTLM TlRMTVNTU...
Хозяин:имя хоста: 8181- Когда я получаю доступ
Решение
Я наконец-то это зафиксировал.Оказалось, что это особенность REST SharePoint.мне нужно было взять язык пользовательского интерфейса во внимание!
Например, в случае локали en-us запрос REST должен выглядеть так:
?$filter=endswith(Путь,'Имя папки')
А вот в ру-ру становится:
?$filter=endswith(Путь,'Имя папки')
Более того, вам нужно избегать русских букв.Итак, в конечном итоге это должно выглядеть так:
?$filter=endswith(%D0%9F%D1%83%D1%82%D1%8C",'Имя папки')
Однако это не единственная проблема...JSON, который я получаю, также оказывается локализованным.Под этим я подразумеваю, что свойства имеют разные локализованные имена.Например, вернул JSON в en-us:
{..."ModifiedById":1, "CopySource":null, "ApprovalStatus":"0","Path":"/Lists/ImageBanners/BottomRight"...}
на ру-ру:
{...."КемИзмененоId":1,"ИсточникКопии":null,"СостояниеУтверждения":"0","Путь":"/Lists/ImageBanners/BottomRight"...}
Это проблема, потому что очень сложно предугадать названия свойств для разных языков.Надеюсь, эта информация станет для кого-то полезным предостережением.