OData Support in MVC 4

OData Support in MVC 4

OData Support in MVC 4

Es gibt Situationen, in denen man mal in MVC OData Support bieten möchte.

Note: Wer OData nicht kennt und sich darüber informieren möchte, hier ein paar Links:
http://en.wikipedia.org/wiki/Open_Data_Protocol (Wikipedia)
https://msdn.microsoft.com/en-us/data/hh237663.aspx (OData Introduction bei MSDN)

 

Mit Web API 2 und Visual Studio 2013 ist es auch soweit kein Problem, da man sich recht einfach und schnell per Scaffolding den notwendigen ODataController erstellen lassen kann.
Zusätzlich erhält man im Controller per Kommentar, welche weitere Schritte durchgeführt werden müssen, damit man OData liefern kann.

 

Doch in meinem Fall hatte ich eine Einschränkung bzgl. der .NET Version 4.
Wie also ermöglicht man OData Support in MVC 4?

 

Als erstes sollte man das NuGet Package „Microsoft.AspNet.WebApi.OData“ installieren.

PM> Install-Package Microsoft.AspNet.WebApi.OData -Version 4.0.30506

Dies ist die letzte stabile Version für das .NET Framework 4.

Note: Wenn die Referenzen nicht richtig gesetzt oder eingebunden werden und man ReSharper installiert hat, dann sollte man ReSharper kurzzeitig deaktivieren (Tools -> Options -> ReSharper -> Suspend Now).

 

Als nächstes muss man die WebApiConfig.cs anpassen.
Statt der üblichen Zeile

config.Routes.MapHttpRoute

nutzt man nun folgendes:

// Einen OData Convention Builder erzeugen
var builder = new ODataConventionModelBuilder();

// Die notwendigen Entitäten dem Builder übergeben und einen Namen vergeben
builder.EntitySet<Person>("persons");
builder.EntitySet<Organization>("organizations")

// Die OData Route definieren, hier: "http://localhost:port/odata/" und das Model des Builders übergeben
config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());

// QuerySupport aktivieren
config.EnableQuerySupport();

Für jede Entität, die OData Support liefern soll, erstellt man sich einen Web API Controller und ändert diesen dann wie folgt ab.

public class EntityController : ODataController

Statt

public IEnumerable<T> Get()

nutzt man

// Ermöglicht OData Queries auf das Result Set
// PageSize setzt maximale Anzahl an Datensätze und ermöglicht server-seitiges Paging
[Queryable(PageSize = 500)]
public IQueryable<T> Get()

Nun kann man das Ergebnis im Browser oder Fiddler betrachten.

http://localhost:port/odata/ liefert ein Ergebnis aller definierten Entitäten für OData zurück.

OData_Metadata
http://localhost:port/odata/entitySetName („entitySetName“ mit definiertem Entitätsnamen aus der WebApiConfig.cs ersetzen) liefert das Ergebnis des definierten ODataControllers zurück.

OData_ResultSet

 

Außerdem kann man OData Queries auf die Get Methode setzen.

Ein paar Beispiele:
http://localhost:63070/odata/persons?%24top=5 liefert die ersten fünf Personen.

OData_Top5

 

http://localhost:63070/odata/persons?%24inlinecount=allpages&%24top=2&%24skip=3 liefert zwei Personen (%24top=2) ab der vierten Position (%24skip=3) und zeigt die Anzahl aller verfügbaren Datensätze (%24inlinecount=allpages)

OData_Top2_Skip3_WithCount

 

Weitere Infos zu OData in ASP.NET:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.