OData 8 搭配.NET Core 8时Select与Expand操作失败解决方案
OData Get请求类型转换报错解决方案
报错信息
无法将类型为'System.Linq.EnumerableQuery
1[Microsoft.AspNetCore.OData.Query.Wrapper.SelectAllAndExpand1[Core.Objects.Result`1[Core.Entities.Invoice]]]'的对象转换为类型'System.Linq.IQueryable`1[Core.Objects.Result`1[Core.Entities.Invoice]]'
解决方案
经排查,问题源于EnableQuery的重复启用:若已在OData全局配置中通过EnableQueryFeatures开启查询支持,控制器方法上不能再添加[EnableQuery]特性,否则会引发类型转换冲突。
全局注册代码示例
Services .AddMvc() .AddControllers() .AddOData(options => options.AddRouteComponents("odata", OdataBuilder.GetEdmModel()) .EnableQueryFeatures(null)) .AddODataNewtonsoftJson();
修改前代码(存在冲突)
[EnableQuery] [HttpGet] public IActionResult Get() { var Items = _unitOfWork.Set<TEntity>(); return Ok(Items); }
修改后代码(解决冲突)
[HttpGet] public IActionResult Get() { var Items = _unitOfWork.Set<TEntity>(); return Ok(Items); }
移除方法上的[EnableQuery]特性后,类型转换报错即可解决。
内容的提问来源于stack exchange,提问作者machariamwangi
相关产品推荐
相关产品推荐

