2017-10-19 5 views
0

J'essaie de suivre ce tutoriel pour créer un service OData. Je suis à la recherche à ce sujet sur les propriétés de navigation:OData Obsolète Code

https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/entity-relations-in-odata-v4

Il semble que certains de ce code est obsolète (l'article est à partir de 2014, mais je suis en utilisant Visual Studio 2017).

J'ai tout à fait quelques soulignements rouges sur ma classe Helper:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Http; 
using System.Web.Http.Routing; 
using System.Web.OData.Extensions; 
using System.Web.OData.Routing; 
using Microsoft.OData; 
using Microsoft.OData.UriParser; 

namespace ProductService 
{ 
    public static class Helpers 
    { 
     public static TKey GetFromUri<TKey>(HttpRequestMessage request, Uri uri) 
     { 
      if(uri == null) 
       throw new ArgumentException("uri"); 

      var urlHelper = request.GetUrlHelper() ?? new UrlHelper(request); 

      string serviceRoot = urlHelper.CreateODataLink(
      request.ODataProperties().RouteName, 
      request.ODataProperties().PathHandler, new List<ODataPathSegment>()); 

      var odataPath = request.ODataProperties().PathHandler.Parse(
       request.ODataProperties().Model, 
       serviceRoot, uri.LocalPath); 

      var keySegment = odataPath.Segments.OfType<KeyValuePathSegment>() 
       .FirstOrDefault(); 
      if (keySegment == null) 
       throw new InvalidOperationException("The link does not contain a key."); 

      var value = ODataUriUtils.ConvertFromUriLiteral(keySegment.Value, 
       ODataVersion.V4); 
      return (TKey)value; 
     } 
    } 
} 

J'ai des problèmes avec trois morceaux de code sur cette classe:

request.ODataProperties().PathHandler 

et

request.ODataProperties().Model 

J'ai des erreurs:

« HttpRequestMessageProperties » ne contient pas une définition pour « PathHandler » et aucune méthode d'extension ...

Il est également incapable de trouver le KeyValuePathSegment classe.

Existe-t-il un moyen de réécrire cette classe pour la garder à jour?

Répondre

1

@ Pizzor2000

Certaines modifications récentes apportées dans la bibliothèque API Web OData 5.x à la version 6.x. Tous les changements que vous pouvez trouver de la note de libération à: https://github.com/OData/WebApi/releases/tag/v6.0.0

pour vos exemples:

vous pouvez appeler des méthodes d'extension pour obtenir les propriétés d'origine, par exemple:

https://github.com/OData/WebApi/blob/master/src/System.Web.OData/Extensions/HttpRequestMessageExtensions.cs#L307 pour obtenir le IEdmModel.

https://github.com/OData/WebApi/blob/master/src/System.Web.OData/Extensions/HttpRequestMessageExtensions.cs#L352 pour obtenir le PathHandler.

En outre, KeyValuePathSegment est supprimé, Web API OData utilise le https://github.com/OData/odata.net/blob/master/src/Microsoft.OData.Core/UriParser/SemanticAst/KeySegment.cs#L22 à la place.

J'espère que cela peut vous aider.