C# 中的 Microsoft Graph 搜索筛选字符串
Posted
技术标签:
【中文标题】C# 中的 Microsoft Graph 搜索筛选字符串【英文标题】:Microsoft Graph Search Filter String in C# 【发布时间】:2018-05-11 20:54:03 【问题描述】:下面的请求适用于三重转义字符,但不适用于单个转义字符,所以如果我有以下内容:
string filter = "\"category <> \"Person\" AND category <> \"Person 2\""
上面打印的字符串会给我们:
filter = "category <> "Person" AND category <> "Person 2""
这不起作用,但下面的过滤器定义将起作用:
string filter =
"\"category <> \\\"Person\\\" AND category <> \\\"Person2\\\"\"";
List<QueryOption> options = new List<QueryOption>
new QueryOption("$search", filter)
;
var messages = graphClient.Me
.MailFolders
.Inbox
.Messages
.Request(options)
.Select("id, Categories, Subject")
.Top(500)
.GetAsync()
.Result;
打印的这个过滤器给我们:
filter = "category <> \"Person\" AND category <> \"Person 2\""
为什么我们在 API 调用的打印字符串中包含一个 \?有人可以解释一下吗?
如果 \ 是 Microsoft Graph 中的转义字符,那么这是有道理的,但 Graph 中的转义字符是另一个“。”。
【问题讨论】:
【参考方案1】:让我们从这里开始。
new QueryOption("$search", filter)
我们在这里做的是准备一个$search
过滤器,它将被附加到一个 url 的 GET 参数中......类似这样。
https://...endpoint?$search=filter
如果最终字符串中没有转义......它看起来像这样
https://...endpoint?$search=category 人物 AND 类别 人物 2
这不是很好。我们需要在字符串周围加上双引号
https://...endpoint?$search=category "Person" AND category "Person 2"
更好,但我们需要在整个过滤器周围加上引号
https://...endpoint?$search="category "Person" AND category "Person 2""
哇!现在我们的过滤器在开头和结尾包含双引号,以及嵌套字符串周围的双引号。好的,让我们转义内部双引号。
https://...endpoint?$search="category \"Person\" AND category \"Person 2\""
所以现在我们知道我们需要构建这个字符串。
"类别 \"Person\" AND 类别 \"Person 2\""
在 C# 中我们有几个选择...我们可以使用普通字符串,这意味着我们需要永远转义 \
和 "
var x = "\"category <> \\\"Person\\\" AND category <> \\\"Person 2\\\"";
或者,您可以使用 Verbatim 字符串。它会减少转义的数量,因为您不需要转义斜线。在逐字字符串中,双引号被转义为 2 个连续的双引号
var y = @"""category <> \""Person\"" AND category <> \""Person 2\""";
【讨论】:
谢谢 Eoin,这是发送给请求的最终 url 吗? "category \"Person\" AND category \"Person 2\"" ?【参考方案2】:您是否尝试过使用 Uri.EscapeDataString() 方法将字符串转义为 URL 友好字符?
var filter = Uri.EscapeDataString($"\"category <> \"Person\" AND category <> \"Person 2\"");
这会将字符串变成:
%22category%20%3C%3E%20%22Person%22%20AND%20category%20%3C%3E%20%22Person%202%22
【讨论】:
以上是关于C# 中的 Microsoft Graph 搜索筛选字符串的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Graph API SharePoint 搜索
使用 microsoft graph api c# 创建在线会议时出现 404 错误,但未登录 AzureActiveDirectory
在哪里可以找到 Microsoft Graph API 中的“发送为”和“代表发送”邮件设置?