使用 'displayName eq' 引用所有字符的 SharePoint 列表的图形过滤器
Graph filter for a SharePoint list using 'displayName eq' quoting all characters
我正在使用 C# Microsoft.Graph
API 与 Microsoft Graph 对话,以查明特定列表是否存在于 SharePoint Online 网站中。我希望这对列表名称中的所有有问题的字符都很稳健,如果 listName
中有冒号,使用 GraphServiceClient.Sites[siteId].Lists[listName]
会失败,所以(在 Whosebug 的建议下)我切换到使用过滤器.
我已经尝试了各种有问题的字符的编码,但无法让它始终如一地工作 - 它要么 returns 一个错误 The expression ... is not valid
要么说列表不存在
这是我的代码的一种变体:
var name="lis !\"£$%^&*()_+-=[]{};':@#~/.,?><`¬";
var encodedName=System.Web.HttpUtility.UrlEncode(name);
existingListRequest.QueryOptions.Add(new QueryOption("filter", $"displayName eq '{encodedName}'"));
以上失败但错误引用原始 'name' 没有任何编码,因此期望编码在到达过滤器之前被解码。我试过不使用 UrlEncode
,而是使用它两次,然后使用它然后用 '%25' 替换结果中的所有 '%' 字符,但是 none 会成功找到列表。
在 Graph 过滤器中对问题字符进行编码的最终方法是什么?
您应该尝试将列表名称中的冒号替换为 x003a。希望这能解决您的问题。
string listName = ListName.Replace(':', 'x003a');
经过反复试验,我找到了正确的解决方案:
name.Replace("'", "''").替换("#", "%23").替换("&", "%26").替换("+" , "%2b");
所有这些步骤都包含在以前的试验中,但我认为也许我随后编码的其他内容导致它无法找到任何东西。
我正在使用 C# Microsoft.Graph
API 与 Microsoft Graph 对话,以查明特定列表是否存在于 SharePoint Online 网站中。我希望这对列表名称中的所有有问题的字符都很稳健,如果 listName
中有冒号,使用 GraphServiceClient.Sites[siteId].Lists[listName]
会失败,所以(在 Whosebug 的建议下)我切换到使用过滤器.
我已经尝试了各种有问题的字符的编码,但无法让它始终如一地工作 - 它要么 returns 一个错误 The expression ... is not valid
要么说列表不存在
这是我的代码的一种变体:
var name="lis !\"£$%^&*()_+-=[]{};':@#~/.,?><`¬";
var encodedName=System.Web.HttpUtility.UrlEncode(name);
existingListRequest.QueryOptions.Add(new QueryOption("filter", $"displayName eq '{encodedName}'"));
以上失败但错误引用原始 'name' 没有任何编码,因此期望编码在到达过滤器之前被解码。我试过不使用 UrlEncode
,而是使用它两次,然后使用它然后用 '%25' 替换结果中的所有 '%' 字符,但是 none 会成功找到列表。
在 Graph 过滤器中对问题字符进行编码的最终方法是什么?
您应该尝试将列表名称中的冒号替换为 x003a。希望这能解决您的问题。
string listName = ListName.Replace(':', 'x003a');
经过反复试验,我找到了正确的解决方案:
name.Replace("'", "''").替换("#", "%23").替换("&", "%26").替换("+" , "%2b");
所有这些步骤都包含在以前的试验中,但我认为也许我随后编码的其他内容导致它无法找到任何东西。