项目中的web api知识总结
最近在做公司的项目,自己负责webapi的框架的搭建与开发,最近很忙,一直没时间对工作中遇到的知识点缺少个总结,现总结一下,对自己是个提升,如果个人的小点点小总结能对博友有帮助那也是善莫大焉.
(1)、 首先说一下c# dynamic,dynamic是FrameWork4.0的新特性.我在api中用了比较多的dynamic,首先个人认为dynamic能使代码变得优雅,可以省去定义多余的实体,dynamic是运行时决定类型有哪些属性,包括赋值和取值都可以随便指定属性,
例如:
dynamic sourceInfo = SqlDataHelper.GetWebDMDynamicData(sourceIdSql, new {id=3).FirstOrDefault();
if (null != sourceInfo)
{
item.SourceId = sourceInfo.SourceId;
item.DocType = sourceInfo.DocType;
item.InvestmentType = sourceInfo.InvestmentType;
}
以上代码中sourceInfo指定了dynamic,开发人员知道如果取值成功肯定会有SourceId属性,所以item.SourceId = sourceInfo.SourceId;赋值就不奇怪了.
同样如下代码也可以自己为dynamic随便指定属性:
dynamic data= null;
data= SqlDataHelper.GetWebDMDynamicData(sql, new { Id = id }).ToList().FirstOrDefault();
data.a= ;
data.b= "test2";
data.c="test3";
可以为dynamic类型data随便指定属性,前提条件是在第(2)步骤时data的值不能为空,否则在第(3)步data是null,这时候就会出现空异常.
(2)、再谈论一下轻量级的ORM框架,这个框架网上已经充斥了大量的学习资料,本人只是对项目中的使用心得做些概括,不对之处欢迎指正.
我们知道调用数据库存储过程肯定有参数化,dapper提供了一个比较好的参数化对象DynamicParameters,上代码:
DynamicParameters dynamicParameters = new DynamicParameters();
dynamicParameters.Add("@p_Id1", id1, DbType.String);
dynamicParameters.Add("@p_Id2", id2, DbType.Int32);
dynamicParameters.Add("@p_dateTime", dateTime, DbType.DateTime);
List<dynamic> info = conn.Query<T>(storeProcedureName,dynamicParameters, null, true, null, CommandType.StoredProcedure) as List<T>;
如果要指定执行存储过程,那么要指定CommandType.StoredProcedure关键字.
(3)、以下是List<T>转dataTable的方法,的确为类型转换省去了好多的代码,但是也有一个自己花了点时间没有解决的问题,就是T必须指定实体类型,而不能使用dynamic,否则type.GetProperties
取不到正确的属性,这样系统就必须多定义一个实体类传进来.
public static DataTable ToDataTable<T>(IList<T> list)
{
//create propertyInfo
List<PropertyInfo> pList = new List<PropertyInfo>();
//get reflector interface
Type type = typeof(T);
DataTable dt = new DataTable();
//add datatable column
Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, Nullable.GetUnderlyingType(
p.PropertyType) ?? p.PropertyType); });
foreach (var item in list)
{
//create new row
DataRow row = dt.NewRow();
pList.ForEach(p => row[p.Name] = p.GetValue(item, null)??System.DBNull.Value);
dt.Rows.Add(row);
}
return dt;
}
好了,以上就是项目中的一些小小的总结,还有一些零碎的知识点不做过多描述了.通过项目过程中还有好多要学习的能力,特别是沟通能力,技术引导业务能力.
项目中的web api知识总结的更多相关文章
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- 使用Http-Repl工具测试ASP.NET Core 2.2中的Web Api项目
今天,Visual Studio中没有内置工具来测试WEB API.使用浏览器,只能测试http GET请求.您需要使用Postman,SoapUI,Fiddler或Swagger等第三方工具来执行W ...
- ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API
ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启 ...
- ASP.NET MVC4中调用WEB API的四个方法
http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...
- 转 web项目中的web.xml元素解析
转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45) 阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...
- 在 MVC6 中创建 Web API
ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ...
- Mvc 6 中创建 Web Api
如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管 微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架.接下来我 ...
- 在ASP.NET MVC中使用Web API和EntityFramework构建应用程序
最近做了一个项目技术预研:在ASP.NET MVC框架中使用Web API和EntityFramework,构建一个基础的架构,并在此基础上实现基本的CRUD应用. 以下是详细的步骤. 第一步 在数据 ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
随机推荐
- [Unity3D入门]入门级游戏项目"坦克狙击手"更新
[Unity3D入门]入门级游戏项目"坦克狙击手"更新 在上一篇中我分享了一个尚未完全写好的入门级unity3d项目"坦克狙击手". 本文介绍最新版的" ...
- java代码效率优化
[转载于http://blog.163.com/user_zhaopeng/blog/static/16602270820122105731329/] 1. 尽量指定类的final修饰符 带有fina ...
- 将不确定变为确定~transactionscope何时提升为分布式事务~SQL2005与SQL2008不同
回到目录 Transactionscope何时被提升为分布式事务,即时要触发msdtc服务,这个问题与数据库版本有关,在前面的文章中,我的MSTDC系列出现了多个版本,有一点没有说清楚,测试的环境不同 ...
- java的五种数据类型解析
不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...
- python学习 数据类型之序列
一.序列(本文使用python3.5)############################################################# 列表.元组 字符窜都是序列#特点:#1 ...
- MySQL5.7.13源代码阅读心得
1.使用gdb这个调试工具. 在linux使用该调试工具非常简单.它的价值非常大,可以告诉你函数相互调用的逻辑(bt命令),告诉你函数执行的情况(通过br命令以及n,c命令单步跟踪函数每一个语句的执行 ...
- Ztree行政地区树状展示
Ztree行政地区树状展示(点击加载) 效果如下: 开始贴代码: 实体类 Item,用于对Ztree的节点展示 public class Item { private String id; priva ...
- Script Component 引用package variable
ScriptComponet 的变量分为两种类型,ReadOnly和ReadWrite,使用C#引用这两种类型的变量,有一点不同. 1,创建两个变量 2,将变量传递给script component ...
- JSP网站开发基础总结《十二》
前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握.具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文 ...
- linux分享六:字符串处理
一:cut (1)其语法格式为:cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file] 使用说明cut 命令从文件的每一行剪切字节.字符和字段并将这 ...