首页 > 解决方案 > 在 ASP.NET Core Web API 中使用一些查询和可排序字段获取请求的最佳实践

问题描述

我有这个动作CommodityTypeController

[HttpGet("")]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<ActionResult> Get(string name, int page = 1, int count = 10)
{
    var result = await commodityTypeService.Get(name: name, page, count);
    return Ok(result);
}

它返回一个列表CommodityTypeDto

这是我的CommodityTypeService

public async Task<IEnumerable<CommodityTypeDto>> Get(string name,int page, int count)
{
    var entities = await commodityTypeRepository.Get(x => name.HasValue() ? x.Name.Contains(name) : true, page, count);
    var dtos = mapper.Map<IEnumerable<CommodityTypeDto>>(entities);
    return dtos;
}

这是我的CommodityTypeDto

public class CommodityTypeDto
{
    public long Id { get; set; }
    public string Name { get; set; }
    public decimal AccountNumberId { get; set; }
}

最后,这是我的CommodityTypeRepository

public async virtual Task<IEnumerable<CommodityType>> Get(Expression<Func<CommodityType, bool>> expression, int page, int count)
{
    var result = await set.Where(expression)
                          .Skip((page-1) * count)
                          .Take(count)
                          .ToListAsync();
    return result;
}

创建 get api 的最佳实践是什么?如果我想在我的 API 中使用更多参数进行搜索并对某些字段进行排序,这是一个好方法吗?

是否有任何库用于从 API 到 EF 上下文进行排序和查询?

标签: c#entity-frameworkhttpasp.net-web-api

解决方案


在后端您应该应用过滤以最小化从服务器到客户端的流量。在前端您应该对返回的结果应用排序和过滤。想象一下当您想在后端对大量数据进行排序时的情况。对于排序标准的每次更改,将传输相同数量的数据。


推荐阅读