Я пытаюсь реализовать маршрутизацию 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? Или мне нужно просто сделать актерский состав?