Richtiger Weg, verschachtelte Expand () von .NET OData 4 Client aufzurufen

8

Problem

Wie wird in einem OData 4-Dienst in der Web-API die geschachtelte $ expand von einem .NET-Client aus aufgerufen? Wir verwenden den OData Client Generator . Zurück in den früheren WCF Data Services mit OData 3-Service konnten wir .Expand("Customers/Orders") aufrufen. In Web-API mit OData 4 können wir dies nicht mehr tun und erhalten Folgendes, wenn Sie versuchen .Expand("Customers/Orders") :

  

Die im URI angegebene Abfrage ist nicht gültig. Es wurde ein Pfad gefunden, der mehrere Navigations- & gt; -Eigenschaften durchquert. Bitte formulieren Sie die Abfrage so um, dass jeder Erweiterungsweg nur Typ & gt; -Segmente und Navigationseigenschaften enthält.

Abhilfe

Wir können das umgehen, indem wir expand wie folgt aufrufen: .Expand("Customers($expand=Orders)") . In nicht verschachtelten $ expand-Szenarien mag ich die Lambda-Unterstützung wie in .Expand(d => d.Customers) . Gibt es im .NET OData 4-Client einen geeigneten Weg, verschachtelte Erweiterungen ohne die unglückliche magische Zeichenfolge .Expand("Customers($expand=Orders)") aufzurufen? Wenn nicht, gibt es ein saubereres String-Muster wie "Kunden / Bestellungen", das funktionieren würde? Danke.

    
Adam Caviness 11.08.2014, 15:26
quelle

2 Antworten

2

In OData v4 ist es nicht zulässig, mehrere Ebenen zu erweitern, wie beispielsweise in der folgenden Frage: .Expand ("Kunden / Aufträge"). Ich glaube nicht, dass der Client eine solche API unterstützt. Hier ist was in der ABNF Ссылка :

%Vor%     
Tan Jinfu 12.08.2014, 05:06
quelle
3

Die Anforderung, die Sie senden möchten, lautet:

%Vor%

richtig?

Gemäß dem OData-Protokoll:

  

Um verwandte Entitäten gemäß einer bestimmten Beziehung anzufordern, gibt der Client eine GET-Anforderung an die Anforderungs-URL der Quellen -Entität aus, gefolgt von einem Schrägstrich und dem Namen der Navigationseigenschaft, die die Beziehung darstellt .

Eine solche Anfrage wird nicht unterstützt, da die "Kunden" vor "/ Bestellungen" der Name eines Entitätssets anstelle einer einzelnen Entität ist. Sie können nur verschachtelte Erweiterungen schreiben wie:

%Vor%

Dies entspricht den folgenden Code-Snippets mit OData V4 Code Generator:

%Vor%

Und Sie müssen alle Kunden durchlaufen, um alle ihre Bestellungen zu erhalten.

    
Yi Ding - MSFT 12.08.2014 02:54
quelle