c# - 在 ASP.NET Core Web API 中过滤结果
问题描述
所以我正在创建一个数据库,允许用户创建一个“魔法项目”,然后他们可以将其上传到我的 ASP.net Web API。这工作得很好。我想通过从 api 中提取所有这些项目来在我的网页中显示它们。这也很好用。但是现在,当我尝试过滤、排序或限制搜索量时,我仍然会得到返回给我的每个项目的基本列表。现在,只有 14 个条目,所以没什么大不了的,但我仍然想完成这项工作。但无论我做什么,它总是返回完整的列表。
这是 Visual Studio 中的 ASP.net 控制器:
[Route("api/v1/MagicItem")]
public class MagicItemController : Controller
{
private ItemListContext context;
public MagicItemController(ItemListContext context)
{
this.context = context;
}
[Produces("application/json")]
[HttpGet]
//public List<MagicItem> GetAllItems(string name, string category, string rarity, int? page, string sort, int limit = 5, string dir = "desc")
public List<MagicItem> GetAllItems(
string name,
string category,
string rarity,
int? page,
string sort,
int limit = 5,
string dir = "desc")
{
IQueryable<MagicItem> query = context.MagicItems;
if (!string.IsNullOrWhiteSpace(name))
query = query.Where(d => d.Name.Contains(name));
if (!string.IsNullOrWhiteSpace(category))
query = query.Where(d => d.Category == category);
if (!string.IsNullOrWhiteSpace(rarity))
query = query.Where(d => d.Rarity == rarity);
if (!string.IsNullOrWhiteSpace(sort))
{
switch (sort)
{
case "Name":
if (dir == "asc")
query = query.OrderBy(d => d.Name);
else if (dir == "desc")
query = query.OrderByDescending(d => d.Name);
break;
case "Rarity":
if (dir == "asc")
query = query.OrderBy(d => d.Rarity);
else if (dir == "desc")
query = query.OrderByDescending(d => d.Rarity);
break;
case "Category":
if (dir == "asc")
query = query.OrderBy(d => d.Category);
else if (dir == "desc")
query = query.OrderByDescending(d => d.Category);
break;
}
}
query = query.Take(limit);
if (page.HasValue)
query = query.Skip(page.Value * limit);
return context.MagicItems.ToList();
}
}
解决方案
你快到了:
只需使用:
return query.ToList();
代替:
return context.MagicItems.ToList();
推荐阅读
- vue.js - 无法在 vue.js 组件中捕获滚动事件
- laravel - 如何在 Laravel 中获取模型关系?
- mysql - 操作数应在 Mysql 中包含 1 列 - 错误 #1241
- zapier - 字段“id”应该是最新任务中的整数:Zapier
- animation - 如何检查 AnimatedContainer 是否完全动画?
- git - 在 git 中移动文件而不移动
- conditional-statements - 如何在 MDX 上的测量时间内计算前 10 个值的标准差
- oracle - 如何使用 SQL 开发人员从另一台计算机访问安装在一台计算机上的 oracle db(以便 2 个人可以在同一个数据库上协同工作)
- html - HTML 字段占据页面的整个宽度?
- aws-lambda - 在使用无服务器的部署阶段(CodePipeline)将秘密传递给 lambda?