星空网 > 软件开发 > ASP.net

ASP.NET Web API中通过URI显示实体中的部分字段

 

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

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。

 




原标题:ASP.NET Web API中通过URI显示实体中的部分字段

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

fba游戏盒:https://www.goluckyvip.com/tag/20250.html
fba有库存不可售:https://www.goluckyvip.com/tag/20251.html
fba与fbm:https://www.goluckyvip.com/tag/20252.html
fba与fbm的区别:https://www.goluckyvip.com/tag/20253.html
fba与海外仓:https://www.goluckyvip.com/tag/20254.html
fba预处理:https://www.goluckyvip.com/tag/20255.html
月活用户超20亿!万亿市值巨头对中国商家进一步开闸放流 :https://www.kjdsnews.com/a/1836412.html
九寨沟周围必去的景点推荐:https://www.vstour.cn/a/363190.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流