$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
$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());
}