ASP.NET Web API中通过URI显示实体中的部分字段
2016-01-22 09:06
746 查看
有时候我们可能不想显示某个实体中的所有字段。比如客户端发出如下请求:
locaohost:43321/api/groups/1/items?fields=id
locaohost:43321/api/groups/1/items?fields=id,name
以上,对于Item这个类,我们可能只想显示id,也有可能是想显示id和name,等等。
如何实现呢?
→ 后端接受fields这个查询字符串的值,split到数组或集合中
→ 遍历这些字段,使用反射获取字段的值,并把每个键值存储起来
假设有如下的领域:
针对Item的控制器如下:
以上,ExpandObject是运行时对象,实现IDictionary<string, object>接口,通过反射,把字段作为ExpandObject的key,把字段值作为ExpandObject的value。
locaohost:43321/api/groups/1/items?fields=id
locaohost:43321/api/groups/1/items?fields=id,name
以上,对于Item这个类,我们可能只想显示id,也有可能是想显示id和name,等等。
如何实现呢?
→ 后端接受fields这个查询字符串的值,split到数组或集合中
→ 遍历这些字段,使用反射获取字段的值,并把每个键值存储起来
假设有如下的领域:
public class Group { public int Id{get;set;} public int UserId{get;set;} public string Title{get;set;} public string Descritpion{get;set;} public int StatusId{get;set;} public ICollection<Item> Items{get;set;} } public class Item { public int Id{get;set;} public string Name{get;set;} }
针对Item的控制器如下:
public class ItemsController : ApiController { [Route("groups/{groupId}/items", Name="ItemsForGroup")] public IHttpActionResult Get(int groupId, string fields = null) { List<string> lstOfFields = new List<string>(); if(fields != null) { lstOfFields = fields.ToLower().Split('').ToList(); } var result = _repo.GetItems() .ToList() .Select(e => ItemFactory.CreateDataShapedObject(e, lstOfFields)); return Ok(result); } } public staic class ItemFactory { public object CreateDataShapedObject(Item item, List<string> lstOfFields) { if(!lstOfFields.Any()) { return item; } else { //运行时对象 ExpandObject objectToReturn = new ExpandObject(); foreach(var field in lstOfFields) { //获取字段值 var fieldValue = item.GetType() .GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance) .GetValue(item, null); ((IDictionary<string, object>)objectToReturn).Add(field, fieldValue); } return objectToReturn; } } }
以上,ExpandObject是运行时对象,实现IDictionary<string, object>接口,通过反射,把字段作为ExpandObject的key,把字段值作为ExpandObject的value。
相关文章推荐
- JSP与ASP.PHP的比較
- RaspberryPi和Arduino控制温室温度
- PagedDataSource数据绑定控件和AspNetPager分页控件结合使用列表分页
- asp.net中将数据导出
- 在 ASP.NET MVC 3 中应用 KindEditor
- AspNet MVC4 教学-22:Asp.Net MVC4 Partial View 技术高速应用Demo
- 搭建了一个多项目、插件化的ASP.net MVC开发框架
- 搭建了一个多项目、插件化的ASP.net MVC开发框架
- 第一个 Asp.Net vNext 应用程序
- .NET初学者推荐课程 asp.net错误代码大全
- ASP网站项目编译
- asp.net无法触发asp控件的后台方法
- ASP.NET 5基础之中间件
- ASP.NET Web API中把分页信息放Header中返回给前端
- Jexus 网站服务器和 ASP.NET 跨平台开发
- ASP.NET 5 改名 ASP.NET Core 1.0
- 一点一点学ASP.NET之基础概念——委托
- asp.net缓存
- 改善 ASP.NET MVC 代码库的 5 点建议
- 改善 ASP.NET MVC 代码库的 5 点建议