2017-07-25 2 views
0

Je veux juste passer 2 paramètres dans le contrôleur et exécuter mon sql-fonction essayer et googlé une des ressources du lot sans chance,OData v4 en utilisant 2 paramètres

quelqu'un pouvait me donner quelques conseils?

essentiellement i suivre cette Web API and OData- Pass Multiple Parameters

quand je l'aide builder.Function compilateur ne cessent de me dire aucune méthode d'extension trouvé.

package.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.3" targetFramework="net452" /> 
    <package id="EntityFramework.Functions" version="1.4.0" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.OData" version="6.0.0" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.OData" version="5.3.1" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Data.Edm" version="5.6.0" targetFramework="net452" /> 
    <package id="Microsoft.Data.OData" version="5.6.0" targetFramework="net452" /> 
    <package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" /> 
    <package id="Microsoft.OData.Core" version="7.0.0" targetFramework="net452" /> 
    <package id="Microsoft.OData.Edm" version="7.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Spatial" version="7.0.0" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> 
    <package id="System.Spatial" version="5.6.0" targetFramework="net452" /> 
</packages> 

mes WebApiConfog.cs

using Microsoft.OData.Edm; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Serialization; 
using System.Web.Http; 
using System.Web.Http.OData.Builder; 
using System.Web.Http.OData.Extensions; 
using wcod; 
using wcod.Model; 
namespace wcod 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 
      ODataModelBuilder builder = new ODataConventionModelBuilder(); 

      // config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); 

      var json = config.Formatters.JsonFormatter; 
      json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 
      config.Formatters.Remove(config.Formatters.XmlFormatter); 



      config.Formatters.Remove(config.Formatters.XmlFormatter); 
      config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; 
      config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
      // var json = config.Formatters.JsonFormatter; 
      // builder.EntitySet<Booking>("Bookings"); 
      builder.EntitySet<LiveBooking>("LiveBookings"); 
      builder.EntitySet<TimeMarker>("TimeMarkers"); 
      builder.EntitySet<BookingInfo>("BookingInfoes"); 
      builder.EntitySet<LiveBookingByType>("LiveBookingByTypes"); 






      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
      config.Routes.MapODataServiceRoute("odata", "odata/v4", builder.GetEdmModel()); 
      // config.MapODataServiceRoute(routeName: "ODataRoute", routePrefix: "odata/v4", model: builder.GetEdmModel()); 
     } 

    } 
} 
+0

oui, je peux, quand j'utilise System.web.Odata.Builder, le builder.getEdModel() obtiendrait le type d'erreur., J'ai essayé de créer un EdmModel statique, toute la structure Odata sont en panne. – user2285201

+0

j'ai essayé, il me renvoie un écran vide – user2285201

+0

fonctionne maintenant, le m $ échafaudage le contrôleur avec Http one.thank vous GWigWam !!! – user2285201

Répondre

1

Vous devez utiliser System.Web.OData.Builder au lieu de System.Web.Http.OData.Builder. Il devrait être dans le paquet Microsoft.AspNet.OData.

Si .GetEdModel() déclenche une exception, il se peut qu'il y ait un problème avec votre définition, et non avec l'utilisation.

0

Eh bien, je suivre cette approche:

WebApiConfig.cs

using System.Web.Http; 
using System.Web.OData.Extensions; 
using System.Web.OData.Builder; 
//using System.Web.OData.Extensions; 
using wcod.Model; 

namespace wcod 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 
      ODataModelBuilder builder = new ODataConventionModelBuilder(); 
      config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); 

      builder.EntitySet<TimeMarker>("TimeMarkers"); 

      var function = builder.Function("GetTimeMarkerSearch"); 
      function.Parameter<string>("bookID"); 
      function.Parameter<string>("keywords"); 
      function.ReturnsCollectionFromEntitySet<TimeMarker>("TimeMarkers"); 
       config.MapHttpAttributeRoutes(); 

      //config.Routes.MapODataServiceRoute("odata", "odata/v4", builder.GetEdmModel()); 

      config.MapODataServiceRoute("odata", "odata/v4", builder.GetEdmModel()); 
     } 

    } 
} 

puis dans mon contrôleur, mycase Ti meMarkersControllers

[HttpGet] 
[ODataRoute("GetTimeMarkerSearch(bookID={bookID},keywords={keywords})")] 
public IHttpActionResult WhateverName([FromODataUri]string bookID, [FromODataUri]string keywords){ 
// my logic 
}