Freigeben über


Neuerungen in ASP.NET-Web-API OData 5.3

von Microsoft

In diesem Thema werden die Neuerungen für ASP.NET-Web-API OData 5.3 beschrieben.

Herunterladen

Die Laufzeitfeatures werden als NuGet-Pakete im NuGet-Katalog veröffentlicht. Sie können die veröffentlichten NuGet-Pakete installieren oder aktualisieren, indem Sie die NuGet-Paket-Manager-Konsole verwenden:

Install-Package Microsoft.AspNet.OData -Version 5.3.0 
Install-Package Microsoft.AspNet.WebApi.OData -Version 5.3.0

Dokumentation

Tutorials und andere Dokumentationen zu ASP.NET-Web-API OData finden Sie auf der ASP.NET-Website.

OData Core-Bibliotheken

Für OData v4 verwendet die Web-API jetzt ODataLib, Version 6.5.0

Neue Features in ASP.NET-Web-API OData 5.3

Unterstützung für $levels in $expand

Sie können die $levels-Abfrageoption in $expand Abfragen verwenden. Zum Beispiel:

http://example.com/Employees?$expand=Manager($levels=2)

Diese Abfrage entspricht folgendem:

http://example.com/Employees?$expand=Manager($expand=Manager))

Unterstützung für offene Entitätstypen

Ein geöffneter Typ ist ein strukturierter Typ, der dynamische Eigenschaften enthält, zusätzlich zu allen Eigenschaften, die in der Typdefinition deklariert sind. Mit offenen Typen können Sie Ihre Datenmodelle flexibler machen. Weitere Informationen finden Sie unter xxxx.

Unterstützung für dynamische Sammlungseigenschaften in geöffneten Typen

Zuvor musste eine dynamische Eigenschaft ein einzelner Wert sein. In 5.3 können dynamische Eigenschaften Sammlungswerte aufweisen. In der folgenden JSON-Nutzlast ist die Emails Eigenschaft beispielsweise eine dynamische Eigenschaft und eine Auflistung des Zeichenfolgentyps:

{
   "Id": 1,
   "Name": "Ben",
   "Emails@odata.type": "#Collection(Edm.String)",
   "Emails": [
      "a@a.com",
      "b@b.com"
   ]
}

Unterstützung der Vererbung für komplexe Typen

Jetzt können komplexe Typen von einem Basistyp erben. Ein OData-Dienst könnte beispielsweise die folgenden komplexen Typen definieren:

public abstract class Shape
{
    public bool HasBorder { get; set; }
}

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

public class Circle : Shape
{
    public Point Center { get; set; }
    public int Radius { get; set; }

    public override string ToString()
    {
        return "{" + Center.X + "," + Center.Y + "," + Radius + "}";
    }
}

public class Polygon : Shape
{
    public IList<Point> Vertexes { get; set; }
    public Polygon()
    {
        Vertexes = new List<Point>();
    }
}

Hier sehen Sie den EDM für dieses Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
  <edmx:DataServices>
    <Schema Namespace="ODataComplexTypeInheritanceSample" xmlns="http://docs.oasis-open.org/odata/ns/edm">
      <ComplexType Name="Shape" Abstract="true">
        <Property Name="HasBorder" Type="Edm.Boolean" Nullable="false" />
      </ComplexType>
      <ComplexType Name="Polygon" BaseType="ODataComplexTypeInheritanceSample.Shape">
        <Property Name="Vertexes" Type="Collection(ODataComplexTypeInheritanceSample.Point)" />
      </ComplexType>
      <ComplexType Name="Point">
        <Property Name="X" Type="Edm.Int32" Nullable="false" />
        <Property Name="Y" Type="Edm.Int32" Nullable="false" />
      </ComplexType>
      <ComplexType Name="Circle" BaseType="ODataComplexTypeInheritanceSample.Shape">
        <Property Name="Center" Type="ODataComplexTypeInheritanceSample.Point" />
        <Property Name="Radius" Type="Edm.Int32" Nullable="false" />
      </ComplexType>
      <EntityContainer Name="Container">
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

Weitere Informationen finden Sie unter Beispiel für die Vererbung komplexer OData-Typen.

Bekannte Probleme und wichtige Änderungen

In diesem Abschnitt werden bekannte Probleme und breaking changes in der ASP.NET-Web-API OData 5.3 beschrieben.

OData v4

Abfrageoptionen

Problem: Die Verwendung geschachtelter $expand mit $levels=max führt zu einer falschen Erweiterungstiefe.

Beispiel für die folgende Anforderung:

~/Entities(6)?$expand=P($levels=2;$expand=D($levels=max))

Wenn MaxExpansionDepth 5 ist, führt diese Abfrage zu einer Erweiterungstiefe von 6.

Fehlerbehebungen und Updates kleinerEr Feature-Updates

Dieses Release enthält auch mehrere Fehlerbehebungen und kleinere Featureupdates.

ASP.NET-Web-API OData 5.3.1

In dieser Version haben wir eine Fehlerbehebung für einige der AllowedFunctions-Enumerationen vorgenommen. Dieses Release enthält keine weiteren Fehlerbehebungen oder neuen Features.