c# - 在 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 上下文进行排序和查询?
解决方案
在后端您应该应用过滤以最小化从服务器到客户端的流量。在前端您应该对返回的结果应用排序和过滤。想象一下当您想在后端对大量数据进行排序时的情况。对于排序标准的每次更改,将传输相同数量的数据。
推荐阅读
- javascript - 如何在 JavaScript 的单例对象中正确使用“this”?
- node.js - insertMany() 中的重复文档
- javascript - 类型 'typeof import("/home/kartik/Desktop/Ecommerce/ecommerce/node_modules/firebase/index")' 上不存在属性 'auth'。ts(2339)
- c# - 保存使用 PdfPig 提取的图像
- python - python中的classobject是什么,它与类名相同吗?
- android - 如何在jetpack compose中更改整个应用程序的分隔线颜色?
- sql - 使用 CustID 和每日金额和 MTD 进行分组查询
- java - appium基础程序报错(项目已导入)
- python - 如何在 matplotlib 的图形上绘制字符串值?
- java - 通知 Big Java Android