如何在Contentful中获取指定SessionId的条目?
获取指定SessionId的Contentful条目解决方案
推荐方案:让Contentful API直接筛选
别本地遍历所有条目,直接让Contentful返回符合条件的结果,既省带宽又高效。用QueryBuilder构建筛选条件就行:
public async Task<IActionResult> Index(int? session) { int targetSession = session ?? 4; // 没传session参数就默认用4,传了就用传入的值 var query = new QueryBuilder<CardioModel>() .WhereEquals(m => m.Session, targetSession); var filteredCardio = await _client.GetEntries(query); return View(filteredCardio); }
本地筛选方案(适合特殊场景)
ContentfulCollection是只读的,没有Add方法,但它支持Linq查询,你可以筛选出符合条件的条目后按需处理:
场景1:视图接受IEnumerable或List类型
直接把筛选后的列表传给视图:
public async Task<IActionResult> Index(int? session) { int targetSession = session ?? 4; var cardio = await _client.GetEntries<CardioModel>(); var filteredItems = cardio.Items.Where(m => m.Session == targetSession).ToList(); return View(filteredItems); }
场景2:视图必须用ContentfulCollection类型
手动构建一个新的ContentfulCollection,把必要属性赋值好:
public async Task<IActionResult> Index(int? session) { int targetSession = session ?? 4; var cardio = await _client.GetEntries<CardioModel>(); var filteredItems = cardio.Items.Where(m => m.Session == targetSession).ToList(); var filteredCardio = new ContentfulCollection<CardioModel> { Items = filteredItems, Total = filteredItems.Count, Skip = cardio.Skip, Limit = cardio.Limit }; return View(filteredCardio); }
关于GetEntriesRaw()的用法
这个方法返回原始JSON响应,一般没必要用,除非你要手动处理JSON。如果非要用,示例如下:
public async Task<IActionResult> Index(int? session) { int targetSession = session ?? 4; var rawResponse = await _client.GetEntriesRaw(new QueryBuilder<CardioModel>() .WhereEquals(m => m.Session, targetSession)); // 用Newtonsoft.Json手动反序列化 var filteredCardio = JsonConvert.DeserializeObject<ContentfulCollection<CardioModel>>(rawResponse); return View(filteredCardio); }
内容的提问来源于stack exchange,提问作者StrikeHacks
相关产品推荐
相关产品推荐

