我按照此页面设置了 MicrosoftGraphProvider:http://www.keithmsmith.com/get-started-microsoft-graph-api-calls-net-core-3/
这工作正常,因为我可以通过以下请求获取所有用户的列表。
var user = await _graphServiceClient.Users.Request().GetAsync();
但是,我并不总是希望返回所有用户,因此我通过电子邮件对用户进行了过滤。
示例说要这样做
var user = await _graphServiceClient.Users[email].Request().GetAsync();
但这总是导致找不到用户,即使我从所有用户的响应中传递了有效的电子邮件。
所以我尝试构建一个过滤器,并这样做。
var test = await _graphServiceClient.Users["$filter=startswith(mail,'[email protected]')"].Request().GetAsync();
var test = await _graphServiceClient.Users["$filter=(startswith(mail,'[email protected]'))"].Request().GetAsync();
这两个都返回了错误:
Status Code: BadRequest
Microsoft.Graph.ServiceException: Code: BadRequest
Message: The $filter path segment must be in the form $filter(expression), where the expression resolves to a boolean.
当我在 Postman 中直接调用 url 时使用此过滤器,效果很好。但我正在尝试使用他们的 sdk,但它没有按预期工作。
这个过滤查询有什么问题?
$filter
应在 Filter
方法中指定。您关注的文章并不反映当前的 API。
var users = await _graphServiceClient.Users
.Request()
.Filter("startswith(mail,'[email protected]')")
.GetAsync();
对于 SDK v5:
var result = await _graphServiceClient.Users.GetAsync((rc) =>
{
rc.QueryParameters.Filter = "startswith(mail,'[email protected]')";
});
检查文档
对于使用较新 GraphServiceClient (5.x.x) 版本的人,Request() 不再可用,因此您可以在 RequestConfiguration 中传递过滤器字符串
例如:
var groups = await _graphServiceClient.Groups.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter = "startswith(mail,'[email protected]')";
});