2016-05-04 7 views
1

auf die Post ich das Starterprojekt https://github.com/OfficeDev/O365-ASPNETMVC-Start/blob/master/README.mdOffice 365 Starter Projektfehler beim Thema Filter anwenden Abfrage

gefunden bin mit kann ich das Projekt ausführen und E-Mail abzurufen, aber wenn ich diese Methode ändern ...

internal async Task<List<model.MailItem>> GetEmailMessages(int pageNo, int pageSize) 

, indem Sie die where-Klausel unter ...

var mailResults = await (from i in outlookServicesClient.Me.Folders.GetById("Inbox").Messages 
           where i.Subject == "test" 
           orderby i.DateTimeReceived descending 
           select i).Skip((pageNo - 1) * pageSize).Take(pageSize).ExecuteAsync(); 

ich diesen Fehler ...

AdalException Diese Ausnahme wird ausgelöst, wenn entweder ein veraltetes O365-Zugriffstoken zu Authentifizierungsfehlern führt oder Sie auf eine Ressource zugreifen, auf die Sie nicht zugreifen können.

Ich habe das Projekt mehrmals gestartet und neu gestartet. Wenn ich die WHERE-Klausel entferne, funktioniert es wieder. Wenn ich die WHERE-Klausel zurück hinzufüge, schlägt sie erneut fehl.

Antwort

2

von wo und orderby tun, Sie versuchen, eine zusammengesetzte Abfrage zu tun,

GET https://outlook.office365.com/api/v1.0/Me/Folders('Inbox')/Messages?$filter=Subject eq 'Test'&$orderby=DateTimeReceived desc&$skip=0&$top=10 

Die Aussichten v1.0-Server RESTful API unterstützt keine solchen Verbund Filter. Er sieht es als "InefficientFilter" an, indem er eine solche Fehlermeldung gibt, "Die Einschränkung oder Sortierreihenfolge ist für diesen Vorgang zu komplex".

Sie können dies umgehen, indem Sie die Art auf Client-Seite tun, möglicherweise den Netzwerkverkehr reduzieren, wie unten,

var mailResults = await (from i in outlookServicesClient.Me.Folders.GetById("Inbox").Messages 
           where i.Subject == "test"         
           select i).Skip((pageNo - 1) * pageSize).Take(pageSize).ExecuteAsync(); 

var mailMessages = mailResults.CurrentPage.OrderByDescending(i=>i.DateTimeReceived);