c# - 如何在 ASP .NET 应用程序上启用 OData 和 .NET Core 3.0 中的计数?
问题描述
当我提出请求时: http://localhost:5000/api/v1/users ?$count=true
它返回对象及其属性的值,但不返回用户数:
这是我在控制器中的操作:
/// <summary>
/// Gets the list of all available users in the system
/// </summary>
/// <returns></returns>
[HttpGet]
[EnableQuery]
public IEnumerable<UserDto> Get()
{
var users = dbContext.Users.ToList();
return users.Select(u =>
{
var dto = mapper.Map<UserDto>(u);
var claims = dbContext.UserClaims.Where(c => c.UserId == u.Id);
dto.FirstName = claims.FirstOrDefault(c => c.ClaimType == JwtClaimTypes.GivenName)?.ClaimValue;
dto.FamilyName = claims.FirstOrDefault(c => c.ClaimType == JwtClaimTypes.FamilyName)?.ClaimValue;
return dto;
}).ToList();
}
这是我的启动配置:
services.AddOData();
app.UseMvc(router =>
{
router.EnableDependencyInjection();
router.Select().Expand().Filter().OrderBy().MaxTop(100).Count().EnableContinueOnErrorHeader();
router.MapODataServiceRoute("odata", "odata", GetEdmModel());
});
IEdmModel GetEdmModel()
{
var odataBuilder = new ODataConventionModelBuilder();
odataBuilder.EntitySet<IntentUser>("Users");
return odataBuilder.GetEdmModel();
}
解决方案
由于我更新到 OData 7.3.0(和 .Net Core 3.1),我遇到了同样的问题。
如果您在控制器类中使用 [Route(...)] 和 [ApiController],可能就是问题所在。Vanish Route 属性和 ApiController 属性: https ://stackoverflow.com/a/58849806/12858107
推荐阅读
- go - 创建处理程序是如何工作的?
- asynchronous - Vuex 状态更改不会触发页面上的反应
- runtime-error - 如何配置 alfresco 以运行脚本任务
- python - 在 Python 中,range(1, 100, *10) 不起作用?
- javascript - window.location.reload 后如何在 Cordova 中清除意图
- unity3d - 从常规 WWW 切换到 UnityWebRequest 问题
- java - 在常量池中操作字符串与在非常量池中操作字符串 - 性能
- c# - 如何编写包含项目列表的 Xamarin 表单页面,其中每个项目都可以在其中包含事务?
- c# - 如何按嵌套集合最大属性排序
- php - 将准备好的语句结果存储到 json 数组中的问题