ListData.svc 具有复杂的过滤器、Internet Explorer、400 Bad HTTP 请求、
-
10-12-2019 - |
题
我无法理解如何 ListData.svc
可以使用IE8和IE9进行调试。
我有一个如下所示的网址:hostname:8181/_vti_bin/listdata.svc/ImageBanners?$filter=endswith(Path,'TopLeft')
并显示 eq true
当我尝试从 SharePoint 独立服务器使用 IE8 访问它时,我收到错误 400。
当我使用 Firefox 请求相同的 URL 时,它工作得很好。
最重要的是 hostname:8181/_vti_bin/listdata.svc/ImageBanners
即使在 IE 中也能正常工作。所以问题似乎出在 $filter=endswith
部分。
然而。当我使用服务器 IP 地址或本地主机在 IE8 中请求相同的 URL 时,即使使用复杂的过滤器,我也会得到正确的结果。
请问有人可以解开这个谜团吗?为什么我会出现这种行为?
附加信息:
- SharePoint 安装了俄语和英语版本。
- SharePoint 应用程序正在使用 NTLM 身份验证。
- IIS 中的匿名身份验证已禁用。
Fiddler 显示每个资源都被请求两次。服务器第一次返回 401,然后根据浏览器和 URL 返回 200 或 400(请参阅上面的详细信息)。
- 当我访问时
ListData.svc
使用 Firefox 正确的 HTTP 请求如下所示:
接受:文本/html,应用程序/xhtml+xml, /
接受语言:en-US
用户代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;哇64;三叉戟/5.0)
接受编码:gzip、压缩
联系:活着
曲奇饼:WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
主持人:本地主机:8181
授权:NTLM TlRMTVNTU...- 使用 IE8 时 HTTP 请求看起来像(注意
lcid=1049
. 。也许这可能是问题所在?):
接受:图像/jpeg、图像/gif、图像/pjpeg、应用程序/x-ms-application、应用程序/xaml+xml、应用程序/x-ms-xbap、 /
接受语言:en-US
用户代理:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 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、压缩
联系:活着
曲奇饼:lcid=1049;WSS_KeepSessionAuthenticated={b3987daa-d463-415f-8fb3-d556c27e5bbf}
授权:NTLM TlRMTVNTU...
主持人:主机名:8181- 当我访问时
解决方案
我终于把它固定下来了。原来是SharePoint的REST的功能。我需要采取 用户界面语言 考虑在内!
例如,在 en-us 语言环境的情况下,REST 查询应如下所示:
?$过滤器=结束(小路,'文件夹名称')
但在 ru-ru 中它变成:
?$过滤器=结束(普鲁特,'文件夹名称')
此外,您需要转义俄语字母。所以,最后它应该看起来像这样:
?$过滤器=结束(%D0%9F%D1%83%D1%82%D1%8C",'文件夹名称')
然而,这并不是唯一的问题......我收到的 JSON 也被本地化了。我的意思是属性有 不同的本地化名称。例如,返回 en-us 中的 JSON:
{..."ModifiedById":1,"CopySource":null,"ApprovalStatus":"0","Path":"/Lists/ImageBanners/BottomRight"...}
鲁鲁语:
{...."КемИзмененоId":1,"ИсточникКопии":null,"СостояниеУтверждения":"0","Путь":"/Lists/ImageBanners/BottomRight"...}
这是一个问题,因为很难预测不同语言的属性名称。我希望此信息对某人有有用的警告。