ASP.NET Core OData 8.2.5报错:找不到MyClass的keyName属性
ASP.NET Core OData 8.2.5 属性查找异常解决
问题概述
受影响程序集:ASP.NET Core OData 8.2.5
升级至8.2.5版本后触发以下异常:
Could not find a property named 'keyName' on type 'MyClass'
该功能在ASP.NET Core OData 8.2.4及之前版本可正常运行,异常触发代码行:
(int)oDataQueryOptions.Count?.GetEntityCount(oDataQueryOptions.Filter?.ApplyTo(myClassQuery, new ODataQuerySettings()) ?? myClassQuery)
重现步骤
- 创建指定C# Web API及实体类
- 调用API:
https://localhost:8080/api/requests?$format=json&$top=10&$orderby=keyName&$count=true
即可触发异常。
相关代码
实体类
public class MyClass { [Key] public int AutoId { get; set; } public string KeyName { get; set; } public string Description { get; set; } }
Web API代码
public Task GetMyClassData(ODataQueryOptions oDataQueryOptions) { var myClassQuery = dbContext.Table1 .GetAll() .Select(t => new MyClass { AutoId = t.Autoid, KeyName = t.KeyName, Description = t.Description, }); var response = new { totalRecords = (int)oDataQueryOptions.Count?.GetEntityCount(oDataQueryOptions.Filter?.ApplyTo(myClassQuery, new ODataQuerySettings()) ?? myClassQuery), records = oDataQueryOptions.ApplyTo(myClassQuery).Cast() }; }
问题原因
ASP.NET Core OData 8.2.5版本在属性名称匹配上引入了更严格的大小写校验机制。实体类中属性名为KeyName(驼峰命名,首字母大写),但请求URL的$orderby参数使用的是keyName(首字母小写),新版本不再自动兼容这种大小写差异,导致无法找到对应属性。
解决方案
方案1:调整请求参数的属性名
将请求URL中的$orderby=keyName改为$orderby=KeyName,与实体类的属性名保持完全一致:
https://localhost:8080/api/requests?$format=json&$top=10&$orderby=KeyName&$count=true
方案2:配置OData支持大小写不敏感的属性匹配
在OData模型配置时,添加自定义命名约定,让OData忽略属性名称的大小写差异:
using Microsoft.OData.ModelBuilder; public IEdmModel GetEdmModel() { var builder = new ODataConventionModelBuilder(); // 启用驼峰命名映射,自动匹配请求中的小写开头属性名 builder.EnableLowerCamelCase(); builder.EntitySet<MyClass>("requests"); return builder.GetEdmModel(); }
若需要更灵活的处理,也可以自定义INamingConvention实现大小写不敏感的属性映射逻辑。
方案3:修正API代码中的Cast方法
原代码中Cast()未指定泛型类型,可能导致OData无法正确识别实体类型,改为Cast<MyClass>():
records = oDataQueryOptions.ApplyTo(myClassQuery).Cast<MyClass>()
方案4:检查OData模型注册
确保在Startup/Program.cs中正确注册了MyClass的OData模型,没有遗漏属性配置或实体集注册。
内容的提问来源于stack exchange,提问作者Abhinav Verma
相关产品推荐
相关产品推荐

