$select和$expand Odata V4命令生成错误

$select和$expand Odata V4命令生成错误,select,asp.net-web-api,odata,expand,Select,Asp.net Web Api,Odata,Expand,我正在使用: .NET Framework 4.7.2 Visual Studio 2017 小田V4 Web API V 5.2.4,实体框架V6.2代码优先于现有MS SQL DB 我的$expand和$select命令生成错误。例如,当我按如下方式使用select命令时: http://localhost:62681/data/Advances?$select=Description 我得到以下错误: URI中指定的查询无效。找不到 类型上名为“Description”的属性 'Micr

我正在使用:

  • .NET Framework 4.7.2
  • Visual Studio 2017
  • 小田V4
  • Web API V 5.2.4,实体框架V6.2代码优先于现有MS SQL DB
  • 我的
    $expand
    $select
    命令生成错误。例如,当我按如下方式使用select命令时:

    http://localhost:62681/data/Advances?$select=Description
    
    我得到以下错误:

    URI中指定的查询无效。找不到 类型上名为“Description”的属性 'Microsoft.AspNet.OData.Query.Expressions.SelectSome\u 1OfAdvance'

    $filter
    $orderby
    起作用

    奇怪的是,这在几周前还可以用,但当我度假回来后,我就不能用了。感谢您的帮助

    我在互联网上搜寻任何关于我问题的线索,但运气不好

    我已升级到Microsoft.OData.Core version=7.5.0和Microsoft.OData.Edm“version=”7.5.0

    WebApi.Config中我的register方法的行是
    Config.Select().Expand().Filter().OrderBy().Count().MaxTop(null)

    公共静态无效寄存器(HttpConfiguration配置)
    {
    //Web API配置和服务
    //Web API路由
    config.maphttpAttribute路由();
    config.Routes.MapHttpRoute(
    名称:“DefaultApi”,
    routeTemplate:“api/{controller}/{id}”,
    默认值:新建{id=RouteParameter.Optional}
    );
    ODataModelBuilder=新ODataConventionModelBuilder();
    config.Select().Expand().Filter().OrderBy().Count().MaxTop(null);
    建造商实体集(“预付款”);
    建造商实体集(“预付款”);
    config.MapODataServiceRoute(
    routeName:“ODataRoute”,
    routePrefix:“数据”,
    模型:builder.GetEdmModel());
    config.AddODataQueryFilter(新的SecureAccess2Attribute());
    }
    

    我做错了什么?

    我在另一个堆栈溢出帖子中找到了解决方案

    在页面的2/3处查找以以下内容开头的帖子:


    我在OData V4中遇到了类似的问题。在这种情况下,如果您在Get方法上使用了一个属性,并在配置中注册了另一个属性,则会出现错误,因为您调用了EnableQuery代码两次:

    对于OData V4,如果您全局启用了控制器类中控制器/方法上的属性[EnableQuery],请删除该属性。它只在一个地方接受它

    public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
    
            // Web API routes
            config.MapHttpAttributeRoutes();           
    
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    
            ODataModelBuilder builder = new ODataConventionModelBuilder(); 
    
    
            config.Select().Expand().Filter().OrderBy().Count().MaxTop(null);
    
            builder.EntitySet<Advance>("Advances");
            builder.EntitySet<Advance_Payments>("Advance_Payments");
    
            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: "data",
                model: builder.GetEdmModel());
    
            config.AddODataQueryFilter(new SecureAccess2Attribute());
        }