ListData.svc con filtros complejos, Internet Explorer, 400 solicitudes HTTP incorrectas,
-
10-12-2019 - |
Pregunta
Tengo problemas para entender cómo ListData.svc
se puede depurar usando IE8 e IE9.
Tengo una URL que se parece a esta:hostname:8181/_vti_bin/listdata.svc/ImageBanners?$filter=endswith(Path,'TopLeft')
y mostrar eq verdadero
Cuando intento acceder a él usando IE8 desde mi servidor independiente de SharePoint, recibo el error 400.
Cuando solicito la misma URL usando Firefox, funciona bien.
encima de eso hostname:8181/_vti_bin/listdata.svc/ImageBanners
Funciona como debería ser incluso en IE.Entonces el problema parece estar en el $filter=endswith
parte.
Sin embargo.Cuando solicito la misma URL en IE8 usando la dirección IP del servidor o el host local, obtengo resultados correctos incluso con filtros complejos.
¿Alguien puede, por favor, arrojar algo de luz sobre este misterio?¿Por qué tengo este tipo de comportamiento?
Información adicional:
- SharePoint tiene instalada la versión rusa e inglesa.
- La aplicación SharePoint utiliza autenticación NTLM.
- La autenticación anónima en IIS está deshabilitada.
Fiddler muestra que cada recurso se solicita dos veces.La primera vez el servidor devuelve 401, y luego 200 o 400 dependiendo del navegador y la URL (ver detalles arriba).
- cuando accedo
ListData.svc
Usar la solicitud HTTP correcta de Firefox se ve así:
Aceptar:texto/html, aplicación/xhtml+xml, /
Aceptar-Idioma:es-US
Agente de usuario:Mozilla/5.0 (compatible;MSIE 9.0;Windows NT 6.1;¡GUAU64;Tridente/5.0)
Aceptar codificación:gzip, desinflar
Conexión:Mantener viva
Galleta:WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Anfitrión:servidor local: 8181
Autorización:NTLM TlRMTVNTU...- Cuando se utiliza la solicitud HTTP de IE8 se ve así (aviso
lcid=1049
.tal vez ese podría ser el problema?):
Aceptar:imagen/jpeg, imagen/gif, imagen/pjpeg, aplicación/aplicación-x-ms, aplicación/xaml+xml, aplicación/x-ms-xbap, /
Aceptar-Idioma:es-US
Agente de usuario:Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 6.1;¡GUAU64;Tridente/5.0;SLCC2;.NET CLR 2.0.50727;.NET4.0C;.NET4.0E;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Ruta de información.3)
Aceptar codificación:gzip, desinflar
Conexión:Mantener viva
Galleta:lcid=1049;WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
Autorización:NTLM TlRMTVNTU...
Anfitrión:nombre de host: 8181- cuando accedo
Solución
Finalmente lo he fijado.Resultó ser la característica de REST de SharePoint.necesitaba tomar Idioma de la interfaz de usuario ¡en consideración!
Por ejemplo, en el caso de la configuración regional en-us, la consulta REST debería verse así:
?$filtro=termina con(Camino,'Nombre de la carpeta')
Pero en ru-ru se convierte en:
?$filtro=termina con(poner,'Nombre de la carpeta')
Además, debes evitar las letras rusas.Entonces, finalmente debería verse así:
?$filtro=termina con(%D0%9F%D1%83%D1%82%D1%8C",'Nombre de la carpeta')
Sin embargo, este no es el único problema...El JSON que recibo también está localizado.Con esto quiero decir que las propiedades tienen diferentes nombres localizados.Por ejemplo, JSON devuelto en en-us:
{..."ModifiedById":1,"CopySource":null,"ApprovalStatus":"0","Path":"/Lists/ImageBanners/BottomRight"...}
en ru-ru:
{...."КемИзмененоId":1,"ИсточникКопии":null,"СостояниеУтверждения":"0","Путь":"/Lists/ImageBanners/BottomRight"...}
Es un problema porque es muy difícil predecir los nombres de las propiedades para diferentes idiomas.Espero que esta información sea una advertencia útil para alguien.