ListData.svc com filtros complexos, Internet Explorer, solicitação HTTP 400 incorreta,
-
10-12-2019 - |
Pergunta
Eu tenho um problema para entender como ListData.svc
pode ser depurado usando IE8 e IE9.
Eu tenho uma URL parecida com esta:hostname:8181/_vti_bin/listdata.svc/ImageBanners?$filter=endswith(Path,'TopLeft')
e mostrar eq verdadeiro
Quando tento acessá-lo usando o IE8 no meu servidor autônomo do SharePoint, recebo o erro 400.
Quando solicito o mesmo URL usando o Firefox, ele funciona perfeitamente.
Além disso hostname:8181/_vti_bin/listdata.svc/ImageBanners
funciona como deveria ser, mesmo no IE.Então o problema parece estar no $filter=endswith
papel.
No entanto.Quando solicito o mesmo URL no IE8 usando o endereço IP do servidor ou localhost, obtenho resultados corretos mesmo com filtros complexos.
Alguém, por favor, pode esclarecer esse mistério?Por que recebo esse tipo de comportamento?
Informação adicional:
- O SharePoint tem versões em russo e inglês instaladas.
- O aplicativo SharePoint está usando autenticação NTLM.
- A autenticação anônima no IIS está desabilitada.
O Fiddler mostra que cada recurso é solicitado duas vezes.Na primeira vez o servidor retorna 401 e depois 200 ou 400 dependendo do navegador e URL (veja detalhes acima).
- Quando eu acesso
ListData.svc
usando a solicitação HTTP correta do Firefox é assim:
Aceitar:texto/html, aplicativo/xhtml+xml, /
Idioma de aceitação:en-EUA
Agente de usuário:Mozilla/5.0 (compatível;MSIE 9.0;Windows NT 6.1;UAU64;Tridente/5.0)
Aceitar codificação:gzip, desinflar
Conexão:Mantenha vivo
Biscoito:WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Hospedar:host local: 8181
Autorização:NTLM TlRMTVNTU...- Ao usar a solicitação HTTP do IE8 parece (observe
lcid=1049
.talvez esse possa ser o problema?):
Aceitar:imagem/jpeg, imagem/gif, imagem/pjpeg, aplicativo/x-ms-application, aplicativo/xaml+xml, aplicativo/x-ms-xbap, /
Idioma de aceitação:en-EUA
Agente de usuário:Mozilla/4.0 (compatível;MSIE 7.0;Windows NT 6.1;UAU64;Tridente/5.0;SLCC2;.NET CLR2.0.50727;.NET4.0C;.NET4.0E;.NET CLR3.5.30729;.NET CLR3.0.30729;InfoPath.3)
Aceitar codificação:gzip, desinflar
Conexão:Mantenha vivo
Biscoito:lcid=1049;WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Autorização:NTLM TlRMTVNTU...
Hospedar:nome do host: 8181- Quando eu acesso
Solução
Eu finalmente consegui definir.Acabou sendo o recurso do REST do SharePoint.eu precisava pegar Idioma da IU em consideração!
Por exemplo, no caso de localidade en-us, a consulta REST deve ser semelhante a esta:
?$filtro=termina com(Caminho,'Nome da pasta')
Mas em ru-ru torna-se:
?$filtro=termina com(Путь,'Nome da pasta')
Além disso, você precisa escapar das letras russas.Então, finalmente deve ficar assim:
?$filtro=termina com(%D0%9F%D1%83%D1%82%D1%8C",'Nome da pasta')
Este não é o único problema, no entanto...O JSON que recebo também está localizado.Com isso quero dizer que as propriedades têm nomes localizados diferentes.Por exemplo, JSON retornado em en-us:
{..."ModifiedById":1,"CopySource":null,"ApprovalStatus":"0","Path":"/Lists/ImageBanners/BottomRight"...}
em ru-ru:
{...."КемИзмененоId":1,"ИсточникКопии":null,"СостояниеУтверждения":"0","Путь":"/Lists/ImageBanners/BottomRight"...}
É um problema porque é muito difícil prever os nomes das propriedades para diferentes idiomas.Espero que esta informação seja um aviso útil para alguém.