C# 如何在ASP.NET中创建OData v2端点?

C# 如何在ASP.NET中创建OData v2端点?,c#,asp.net,rest,asp.net-web-api,odata,C#,Asp.net,Rest,Asp.net Web Api,Odata,我正在尝试使用ASP.NET Web API实现OData端点。我从nuget安装了适用于OData 1-3的Microsoft ASP.NET Web API 2.2包,我认为我运行的是OData v3端点 $metadata: <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataSer

我正在尝试使用ASP.NET Web API实现OData端点。我从nuget安装了适用于OData 1-3的Microsoft ASP.NET Web API 2.2包,我认为我运行的是OData v3端点

$metadata:

<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">

WebApiConfig.cs:

using System.Web.Http;
using System.Web.Http.OData.Builder;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<MyModel>("MyModels");
        config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
    }
}
使用System.Web.Http;
使用System.Web.Http.OData.Builder;
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
ODataConventionModelBuilder=新ODataConventionModelBuilder();
builder.EntitySet(“MyModels”);
config.Routes.MapODataRoute(“odata”,“odata”,builder.GetEdmModel());
}
}

我刚刚发现我的预期客户端应用程序只能支持ODataV2。有没有办法将Web API配置为在OData v2而不是OData v3中说话或在OData v3之外说话?

在model builder上设置服务的版本和最大版本:

var odataVersion2 = new Version(2, 0);
var builder = new ODataConventionModelBuilder();
builder.DataServiceVersion = odataVersion2;
builder.MaxDataServiceVersion = odataVersion2;

您需要设置DataService(OData版本)、Edm(CSDL版本)和Edmx的版本:

var version = Microsoft.Data.Edm.Csdl.CsdlConstants.EdmxVersion2;
var builder = new ODataConventionModelBuilder
{
   // OData V2.0
   DataServiceVersion = version,
   MaxDataServiceVersion = version
};
// Generate Model
var edmModel = builder.GetEdmModel();
// CSDL Version 2.0
edmModel.SetEdmVersion(version);
// Set Edmx Version
edmModel.SetEdmxVersion(version);