Co nowego w interfejsie API sieci Web ASP.NET OData 5.3

autor: Microsoft

W tym temacie opisano nowości dotyczące interfejsu API sieci Web OData 5.3 ASP.NET.

Pobierz

Funkcje środowiska uruchomieniowego są wydawane jako pakiety NuGet w galerii NuGet. Możesz zainstalować lub zaktualizować wydane pakiety NuGet przy użyciu konsoli Menedżera pakietów NuGet:

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

Dokumentacja

Samouczki i inne dokumenty dotyczące ASP.NET internetowego interfejsu API OData można znaleźć w witrynie internetowej ASP.NET.

Biblioteki podstawowe OData

W przypadku protokołu OData w wersji 4 internetowy interfejs API używa teraz biblioteki ODataLib w wersji 6.5.0

Nowe funkcje w interfejsie API sieci Web ASP.NET OData 5.3

Obsługa $levels w usłudze $expand

Możesz użyć opcji zapytania $levels w zapytaniach $expand. Na przykład:

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

To zapytanie jest równoważne:

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

Obsługa otwartych typów jednostek

Typ otwarty jest typem ustrukturyzowanym, który zawiera właściwości dynamiczne, oprócz wszystkich właściwości zadeklarowanych w definicji typu. Typy otwarte umożliwiają dodawanie elastyczności do modeli danych. Aby uzyskać więcej informacji, zobacz xxxx.

Obsługa właściwości kolekcji dynamicznej w typach otwartych

Wcześniej właściwość dynamiczna musiała być pojedynczą wartością. W wersji 5.3 właściwości dynamiczne mogą mieć wartości kolekcji. Na przykład w poniższym ładunku Emails JSON właściwość jest właściwością dynamiczną i jest kolekcją typu ciągu:

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

Obsługa dziedziczenia dla typów złożonych

Teraz typy złożone mogą dziedziczyć po typie podstawowym. Na przykład usługa OData może definiować następujące typy złożone:

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>();
    }
}

Oto przykład EDM:

<?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>

Aby uzyskać więcej informacji, zobacz Przykład dziedziczenia typu złożonego OData.

Znane problemy i zmiany powodujące niezgodność

W tej sekcji opisano znane problemy i zmiany powodujące niezgodność w interfejsie API sieci Web ASP.NET OData 5.3.

OData 4

Opcje zapytania

Problem: Użycie zagnieżdżonej $expand z $levels=max powoduje niepoprawną głębokość rozszerzenia.

Na przykład, biorąc pod uwagę następujące żądanie:

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

Jeśli MaxExpansionDepth wartość wynosi 5, zapytanie spowoduje zwiększenie głębokości 6.

Poprawki błędów i Aktualizacje funkcji pomocniczych

Ta wersja zawiera również kilka poprawek błędów i drobnych aktualizacji funkcji.

ASP.NET internetowego interfejsu API OData 5.3.1

W tej wersji wprowadziliśmy poprawkę błędu do niektórych wyliczenie AllowedFunctions. Ta wersja nie zawiera żadnych innych poprawek usterek ani nowych funkcji.