使用 '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");

所有这些步骤都包含在以前的试验中,但我认为也许我随后编码的其他内容导致它无法找到任何东西。