【发布时间】:2018-04-22 07:18:03
【问题描述】:
我正在使用最新的 Microsoft.AspNetCore.OData (7.0.0-beta2)。 我正在尝试使用 ODataQueryOptions 从具有 Camel case 属性名称的 OData 查询中获取 OData 参数。
我用过builder.EnableLowerCamelCase();
使用 Pascal 案例属性名称调用我的控制器端点时,一切正常。例如:
网址:/myentities?$orderby=**Id**
控制器动作:public async Task<IEnumerable<MyEntity>> Get(ODataQueryOptions<MyEntity> options)
但只要我使用驼峰式名称 (/myentities?$orderby=**id**),OData 就会引发验证异常:
ODataException:在类型上找不到名为“id”的属性 'MyNamespace.MyEntity'。 Microsoft.OData.UriParser.EndPathBinder.GeneratePropertyAccessQueryForOpenType(EndPathToken endPathToken、SingleValueNode 父节点) Microsoft.OData.UriParser.EndPathBinder.BindEndPath(EndPathToken endPathToken) Microsoft.OData.UriParser.MetadataBinder.Bind(QueryToken 令牌) Microsoft.OData.UriParser.OrderByBinder.ProcessSingleOrderBy(BindingState 状态,OrderByClause thenBy,OrderByToken orderByToken) Microsoft.OData.UriParser.OrderByBinder.BindOrderBy(BindingState 状态,IEnumerable orderByTokens) Microsoft.OData.UriParser.ODataQueryOptionParser.ParseOrderByImplementation(字符串 orderBy、ODataUriParserConfiguration 配置、ODataPathInfo odataPathInfo) Microsoft.OData.UriParser.ODataQueryOptionParser.ParseOrderBy() Microsoft.AspNet.OData.Query.OrderByQueryOption.get_OrderByClause() Microsoft.AspNet.OData.Query.OrderByQueryOption.get_OrderByNodes() Microsoft.Extensions.Internal.PropertyHelper.CallNullSafePropertyGetter(Func getter,对象目标) Microsoft.AspNetCore.Mvc.Internal.DefaultComplexObjectValidationStrategy+Enumerator.GetModel(object 容器,ModelMetadata 属性) Microsoft.AspNetCore.Mvc.Internal.DefaultComplexObjectValidationStrategy+Enumerator+c__DisplayClass10_0.b__1() Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationEntry.get_Model() Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitChildren(IValidationStrategy 战略) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitComplexType(IValidationStrategy 默认策略) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(模型元数据 元数据、字符串键、对象模型) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitChildren(IValidationStrategy 战略) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.VisitComplexType(IValidationStrategy 默认策略) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Visit(模型元数据 元数据、字符串键、对象模型) Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate(ModelMetadata 元数据、字符串键、对象模型) Microsoft.AspNetCore.Mvc.Internal.DefaultObjectValidator.Validate(ActionContext actionContext、ValidationStateDictionary 验证状态、字符串 前缀,对象模型) Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder+d__6.MoveNext()
我知道builder.EnableLowerCamelCase(); 只是在序列化 OData 实体“响应”时使用 Camel 大小写,但是如何使用 Camel 大小写名称和 ODataQueryOptions 正确创建带有 asp.net 核心的 OData API?
我必须实现自定义活页夹还是有本地方法可以做到这一点?
我在这里发现了一个可能与我的问题有关的问题:https://github.com/OData/WebApi/issues/889
有没有人设法在没有任何黑客攻击的情况下实现这一点?
【问题讨论】:
标签: c# odata asp.net-core-webapi