博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Web API中通过URI显示实体中的部分字段
阅读量:5774 次
发布时间:2019-06-18

本文共 2034 字,大约阅读时间需要 6 分钟。

 

有时候我们可能不想显示某个实体中的所有字段。比如客户端发出如下请求:

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
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
lstOfFields = new List
(); 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
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
)objectToReturn).Add(field, fieldValue); } return objectToReturn; } }}

 

以上,ExpandObject是运行时对象,实现IDictionary<string, object>接口,通过反射,把字段作为ExpandObject的key,把字段值作为ExpandObject的value。

 

转载地址:http://snaux.baihongyu.com/

你可能感兴趣的文章
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
软件开发学习的5大技巧,你知道吗?
查看>>
java入门第二季--封装--什么是java中的封装
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>
机器学习实战_一个完整的程序(一)
查看>>
Web框架的常用架构模式(JavaScript语言)
查看>>
如何用UPA优化性能?先读懂这份报告!
查看>>
这些Java面试题必须会-----鲁迅
查看>>
Linux 常用命令
查看>>
NodeJS 工程师必备的 8 个工具
查看>>
CSS盒模型
查看>>
ng2路由延时加载模块
查看>>
使用GitHub的十个最佳实践
查看>>
全面了解大数据“三驾马车”的开源实现
查看>>