2017-07-25 42 views
0

我只想2参数传递到控制器,并运行自己的SQL-功能 尝试和GOOGLE了大量的资源,没有运气,的OData V4使用2参数

任何人都可以给我一些提示吗?

我基本上遵循这一Web API and OData- Pass Multiple Parameters

在使用builder.Function编译我一直告诉我没有发现扩展方法。

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> 

我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

是的,我可以,当我使用System.web.Odata.Builder时,builder.getEdModel()会得到错误类型,我试图创建一个静态EdmModel,整个Odata结构都搞乱了。 – user2285201

+0

我试过了,它给我一个空白屏幕 – user2285201

+0

现在作品,m $脚手架控制器与Http one.thank你GWigWam! – user2285201

回答

1

您应该使用System.Web.OData.Builder,而不是System.Web.Http.OData.Builder。它应该在包Microsoft.AspNet.OData

如果.GetEdModel()引发异常,那么您的定义可能有问题,而不是使用。

0

嗯,我按照这个办法:

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

    } 
} 

然后在我的控制, mycase Ti meMarkersControllers

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