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显示实体中的部分字段的更多相关文章
- How ASP.NET Web API 2.0 Works?[持续更新中…]
一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- 【ASP.NET Web API教程】1.1 第一个ASP.NET Web API
Your First ASP.NET Web API (C#)第一个ASP.NET Web API(C#) By Mike Wasson|January 21, 2012作者:Mike Wasson ...
- ASP.NET Web API从注释生成帮助文档
默认情况下,ASP.NET Web API不从Controller的注释中生成帮助文档.如果要将注释作为Web API帮助文档的一部分,比如在帮助文档的Description栏目中显示方法注释中的su ...
- HttpClient + ASP.NET Web API, WCF之外的另一个选择
WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...
- 【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API
原文 [ASP.NET Web API教程]2.1 创建支持CRUD操作的Web API 2.1 Creating a Web API that Supports CRUD Operations2.1 ...
- 关于操作 ASP.NET Web API的实例
WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...
- 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是 ...
- 细说Asp.Net Web API消息处理管道(二)
在细说Asp.Net Web API消息处理管道这篇文章中,通过翻看源码和实例验证的方式,我们知道了Asp.Net Web API消息处理管道的组成类型以及Asp.Net Web API是如何创建消息 ...
随机推荐
- SQL Server 触发器demo
GO /****** Object: Trigger [dbo].[tri_device] Script Date: 2018/6/11 10:56:08 ******/ SET ANSI_NUL ...
- Highcharts 使用
官网:https://www.hcharts.cn/ api:https://api.hcharts.cn/highcharts 效果 html代码 <div id="containe ...
- 【splunk】数据输入-文件目录 导入失败
今天用splunk的“数据输入-文件目录”自动监控文件并索引,结果失败了,完全没有出现我要的索引. 解决: 删除文件监控 改为一次性索引 再重新添加连续监控 原因: 尚不明确 https://answ ...
- 使用caffe模型测试图片(python接口)
1.加载相关模块 1.1 加载numpy import numpy as np 1.2 加载caffe 有两种方法. 方法一(静态导入): 找到当前环境使用的python的site-packages目 ...
- ural1855 线段树区间更新+推公式维护一元二次式
和威威猫系列故事差不多,都是根据条件推出公式 /* 操作c a b d:a到b道路上的所有边权值加d 操作e a b:问a到b中包含的道路的平均权值 区间平均值=所有可能路径权值/所有路径数, 而路径 ...
- Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
一.概述 线上有一套k8s集群,部署了很多应用.现在需要对一些基础服务做一些常规检测,比如: 系统时间,要求:k8s的每一个节点的时间,差值上下不超过2秒 k8s版本,要求:k8s的每一个节点的版本必 ...
- HDU 1029 某个数出现的次数大于等于(N+1)/2的是哪个 map水题
题意:输入n个数 n为奇数 问某个数出现的次数大于等于(N+1)/2的是 哪个 输出来Sample Input51 3 2 3 3111 1 1 1 1 5 5 5 5 5 571 1 1 1 1 1 ...
- Hibernate api 之常见的类(配置类,会话工厂类,会话类)
1:Configuration :配置管理类对象 1.1:config.configure(): 加载主配置文件的方法(hibernate.cfg.xml) ,默认加载src/hibernate.cf ...
- join 关键字
参考:http://www.blogjava.net/vincent/archive/2008/08/23/223912.html
- 6-2 S树 uva712
这题关键是 反转 查询是固定按照x1x2x3来的 那么先收集前面的顺序 然后在数组里面直接调用即可 比如前面的树是 x3 x1 x2 就把这个当作数组下标 最左边的树是 1<&l ...