gpt4 book ai didi

c# - 在 ASP.NET Web API 2.2 中启用 OData v4.0 路由时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 22:22:17 24 4
gpt4 key购买 nike

我正在尝试在我的 ASP.NET Web API 中实现 OData 路由。为了获得指导,我查看了本教程:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint .

但是,我不断在 MapODataServiceRoute() 函数中收到错误消息。显然,该函数需要一个 Microsoft.OData.Edm.IEdmModel,而我的构建器的 GetEdmModel() 函数只返回 Microsoft.Data.Edm.IEdmModel。

我在网上做了一些调查。 Microsoft.Data.Edm 是旧版本 OData 的库。 Microsoft.OData.Edm 适用于 OData v4.0,这就是我在 WebApiConfig.cs 文件中注释掉 Microsoft.Data.Edm 的原因。这是我的代码。

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?还是我只需要做一个石膏?

最佳答案

用 System.Web.OData.Builder 替换 System.Web.Http.OData.Builder 似乎可行。

这是带有解释的链接:https://devblogs.microsoft.com/aspnet/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0/

我认为这条线几乎可以概括它:

The assembly name and the root namespace are now System.Web.OData instead of System.Web.Http.OData.

我现在使用的 header 是:

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;

关于c# - 在 ASP.NET Web API 2.2 中启用 OData v4.0 路由时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29264924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com