如何在Microsoft Graph API的SharePoint搜索q参数中使用双引号?
你遇到的报错是因为URL中的双引号没有被正确编码,服务器解析时把它当成了URL语法的一部分,从而触发了语法错误。要实现连续关键词的精确匹配,正确的做法是确保双引号在请求中被URL编码,下面给你两种可行的解决方案:
方案一:单独编码搜索查询参数
先构造带双引号的搜索短语,再用encodeURIComponent()对整个查询值进行编码,这样所有特殊字符(包括双引号和空格)都会被正确转义:
// 构造带双引号的精确匹配查询 var searchQuery = '"xx yy"'; // 对查询字符串进行URL编码 var encodedQuery = encodeURIComponent(searchQuery); // 拼接成完整的API请求地址 var filesUri = `https://graph.microsoft.com/v1.0/sites/{siteid}/drive/search(q=${encodedQuery})`; $.ajax({ type: "GET", url: filesUri, contentType: "application/x-www-form-urlencoded;charset=UTF-8", headers: { "Authorization": "Bearer " + token } }).done(function (response) { alert("Successfully fetched files from sharepoint."); var items = response.value; }).fail(function (ex) { alert("Fetching files from SharePoint failed." + ex); });
方案二:手动替换双引号为URL编码值
URL中双引号的编码是%22,空格的编码是%20,你可以直接在URL中用这些编码值代替原始字符,避免编码函数的问题:
// 直接使用编码后的双引号和空格构造URL var filesUri = 'https://graph.microsoft.com/v1.0/sites/{siteid}/drive/search(q=%22xx%20yy%22)'; $.ajax({ type: "GET", url: filesUri, contentType: "application/x-www-form-urlencoded;charset=UTF-8", headers: { "Authorization": "Bearer " + token } }).done(function (response) { alert("Successfully fetched files from sharepoint."); var items = response.value; }).fail(function (ex) { alert("Fetching files from SharePoint failed." + ex); });
为什么原来的代码不行?
你之前用encodeURI()编码整个URL,但encodeURI()不会对双引号进行编码(它只处理部分特殊字符),所以服务器收到的q参数仍然是"xx yy",这会被服务器认为是语法错误。而encodeURIComponent()会编码所有URL特殊字符,包括双引号,确保服务器能正确解析你的精确匹配查询。
内容的提问来源于stack exchange,提问作者Vinu
相关产品推荐
相关产品推荐

