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是如何创建消息 ...
随机推荐
- xshell xftp免费版下载方法
第一步:进入官网 https://www.netsarang.com/ 第二步:选中Free License 第三步:选中你要下的xftp或者xsell (l两个好像不能一块下,都要单独操作) 第四步 ...
- SQL定义变量
- wpf 用户自定义事件传参2
public delegate void MenuButtonClickEventHandler(object sender, EventArgs e); public event MenuButto ...
- Laravel Eloquent 数据查询结果中日期的格式化
两种情况: 使用 Model 的查询 例如: $item = App\Models\Apple::first(); $date = $item->created_at->format('Y ...
- strchr()的用法
strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...
- Luogu P4945 【最后的战役】
本来以为做法一样,就是少带个$log$,结果发现看不懂出题人的题解(我好菜啊) 那就自己写一篇吧 比较简单的$DP$思路 状态定义: 前两个转移很好处理,第三个好像就不好办了 不妨暴力定义进状态里 设 ...
- hdu1255扫描线计算覆盖两次面积
总体来说也是个模板题,但是要开两个线段树来保存被覆盖一次,两次的面积 #include<iostream> #include<cstring> #include<cstd ...
- PHP PC端微信扫码支付【模式二】详细教程-附带源码(转)
博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们! 首先还是 ...
- Codeforces 1102F Elongated Matrix 状压dp
Elongated Matrix 预处理一下两两之间的最小值, 然后直接dp. #include<bits/stdc++.h> #define LL long long #define f ...
- 【Java】 剑指offer(55-2) 平衡二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树 ...