使用Office 365 Mail API .NET Client进行OData搜索

时间:2015-11-25 18:07:40

标签: c# odata office365 office365api office365-restapi

我需要执行OData查询$ search =" subject:pizza"使用OutLook 365 API但使用Outlookservicesclient(在outlook 365 sdk中找到,这个nuget https://www.nuget.org/packages/Microsoft.Office365.OutlookServices-V2.0/

请参阅此OutLookAPI OData query Reference

这可以正常使用HttpClient但使用.NET客户端库,它似乎无法添加任何非标准查询参数。

即:var messages = await client.Users['mail@me.com'].Messages .Where(m => m.IsRead == false) .Take(50) .ExecuteAsync();

生成以下RequestURI https://outlook.office365.com/api/v2.0/Users('mail%40me.com')/Messages?$filter=IsRead eq false&$top=50并正确执行。

然而,如果尝试以下操作,var query = client.Users['Mail@me.com'].Messages .Context.CreateQuery<Message>("Users('Mail@me.com')/Messages") .AddQueryOption("$search", "subject:pizza");

返回Exception:Thrown: "Can't add query option '$search' because it begins with reserved character '$'." (System.NotSupportedException) A System.NotSupportedException was thrown: "Can't add query option '$search' because it begins with reserved character '$'."

如果省略AddQueryOption行,

或即时获取身份验证错误。

我需要做的就是追加$search=subject:pizza RequestURI!如果没有实际使用其他客户端,这似乎是不可能的,因为Outlook客户端似乎仅限于内置Linq方法。

添加了一个事实,即客户端库没有参考文档,我已经走到了尽头。有谁知道它是否可以通过outlookservicesclient包含$ search?

1 个答案:

答案 0 :(得分:2)

我查看了OData.NET人员,他们打开了issue on GitHub来跟踪将$search添加到AddQueryOption的错误。与此同时,他们建议你可以尝试这样的方法来使其发挥作用:

var query = context.CreateQuery("Users('Mail@me.com')/Messages");
var searchUri = new Uri(query.RequestUri.OriginalString + "?$search=%22subject%3Apizza%22");
var messages =  context.Execute<Message>(searchUri, "Get");