Nouveautés de API Web ASP.NET OData 5.3

par Microsoft

Cette rubrique décrit les nouveautés de API Web ASP.NET OData 5.3.

Télécharger

Les fonctionnalités d’exécution sont publiées sous forme de packages NuGet dans la galerie NuGet. Vous pouvez installer ou mettre à jour les packages NuGet publiés à l’aide de la console du Gestionnaire de package NuGet :

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

Documentation

Vous trouverez des tutoriels et d’autres documentations sur API Web ASP.NET OData sur le site web ASP.NET.

Bibliothèques OData Core

Pour OData v4, l’API web utilise désormais ODataLib version 6.5.0

Nouvelles fonctionnalités dans API Web ASP.NET OData 5.3

Prise en charge des $levels dans $expand

Vous pouvez utiliser l’option de requête $levels dans $expand requêtes. Par exemple :

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

Cette requête équivaut à :

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

Prise en charge des types d’entités ouverts

Un type ouvert est un type structuré qui contient des propriétés dynamiques, en plus de toutes les propriétés déclarées dans la définition de type. Les types ouverts vous permettent d’ajouter de la flexibilité à vos modèles de données. Pour plus d’informations, consultez xxxx.

Prise en charge des propriétés de collection dynamiques dans les types ouverts

Auparavant, une propriété dynamique devait être une valeur unique. Dans la version 5.3, les propriétés dynamiques peuvent avoir des valeurs de collection. Par exemple, dans la charge utile JSON suivante, la Emails propriété est une propriété dynamique et est de collection de type chaîne :

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

Prise en charge de l’héritage pour les types complexes

Désormais, les types complexes peuvent hériter d’un type de base. Par exemple, un service OData peut définir les types complexes suivants :

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

Voici l’EDM pour cet exemple :

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

Pour plus d’informations, consultez Exemple d’héritage de type complexe OData.

Problèmes connus et modifications cassants

Cette section décrit les problèmes connus et les changements cassants dans le API Web ASP.NET OData 5.3.

OData v4

Options de requête

Problème : L’utilisation de $expand imbriquées avec $levels=max entraîne une profondeur d’expansion incorrecte.

Par exemple, en fonction de la demande suivante :

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

Si MaxExpansionDepth la valeur est 5, cette requête entraînerait une profondeur d’expansion de 6.

Correctifs de bogues et Mises à jour de fonctionnalités mineures

Cette version inclut également plusieurs correctifs de bogues et mises à jour mineures des fonctionnalités.

API Web ASP.NET OData 5.3.1

Dans cette version, nous avons apporté un correctif de bogue à certaines des énumérations AllowedFunctions. Cette version n’a pas d’autres correctifs de bogues ni de nouvelles fonctionnalités.