2015-03-25 4 views
5

Я пытаюсь реализовать маршрутизацию OData в ASP.NET ASP.NET. Для руководства я посмотрел на этот учебник: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint.Ошибка в маршрутизации OData v4.0 в ASP.NET Web API 2.2

Однако я продолжаю получать сообщение об ошибке в функции MapODataServiceRoute(). По-видимому, функция ожидает Microsoft.OData.Edm.IEdmModel, а функция GetEdmModel() моего создателя возвращает только файл Microsoft.Data.Edm.IEdmModel.

Я провел некоторое исследование в Интернете. Microsoft.Data.Edm - это библиотека для более старой версии OData. Microsoft.OData.Edm для OData v4.0, поэтому я прокомментировал файл Microsoft.Data.Edm в файле WebApiConfig.cs. Вот мой код.

using MyApp.Models; 
// using Microsoft.Data.Edm; 
using Microsoft.OData.Edm; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net.Http.Headers; 
using System.Web.Http; 
using System.Web.Http.OData.Builder; 
using System.Web.OData.Extensions; 
using System.Web.OData.Routing; 

namespace MyAppAPI 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Enable attribute routing 
      config.MapHttpAttributeRoutes(); 

      // Enable OData routing 
      config.MapODataServiceRoute(
       routeName: "MyApp", 
       routePrefix: "odata", 
       model: GetEdmModel()); 

      // Conventional routing 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. 
      // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. 
      // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. 
      config.EnableQuerySupport(); 

      // To disable tracing in your application, please comment out or remove the following line of code 
      // For more information, refer to: http://www.asp.net/web-api 
      config.EnableSystemDiagnosticsTracing(); 

      // Trying to get most browsers (i.e. Google Chrome) to return JSON 
      config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     } 

     // Configure modesl to use Odata 
     public static IEdmModel GetEdmModel() 
     { 
      ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 
      builder.EntitySet<ModelA>("ModelA"); 
      builder.EntitySet<ModelB>("ModelB"); 
      return builder.GetEdmModel(); 
     } 

    } 
} 

Однако, я все еще получаю сообщение об ошибке:

Error 1 Cannot implicitly convert type 'Microsoft.Data.Edm.IEdmModel' to 'Microsoft.OData.Edm.IEdmModel'. An explicit conversion exists (are you missing a cast?) 

Есть ли чистый способ получить Microsoft.OData.Edm.IEdmModel? Или мне нужно просто сделать актерский состав?

ответ

9

Замена System.Web.Http.OData.Builder с System.Web.OData.Builder, похоже, сработает.

Вот ссылка с пояснением: http://blogs.msdn.com/b/webdev/archive/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0.aspx

Я думаю, что эта линия в значительной степени подводит итог, хотя:

имя сборки и корень пространства имен теперь System.Web.OData вместо System.Web.Http.OData.

Заголовки Я использую в настоящее время:

using MyApp.Models; 
// using Microsoft.Data.Edm; 
using Microsoft.OData.Edm; 
using System.Net.Http.Headers; 
using System.Web.Http; 
// using System.Web.Http.OData.Builder; 
using System.Web.OData.Builder; 
using System.Web.OData.Extensions; 
1

я хочу это поможет, я получил ту же ошибку, когда я попытался сделать такой же пример, я просто сделал следующий пакетом менеджер консоли

1- Uninstall-пакет Microsoft.OData.Edm -Force 2- Install-Package Microsoft.OData.Edm

, то она отлично работает со мной.

Смежные вопросы