WebApi接口传参
目前接口统一使用 [FromBody]Dictionary<string,string> req 来接收。

有时候,需要把从req字典提取多个字段赋值给 model,几个还好,几十个赋值就不好了。因此设计了使用泛型、反射帮助赋值。
设计不怎么通用,随着类型的增多,这个需要继续迭代。
public static A MapperThree<A>(Dictionary<string, string> req)
{
A a = Activator.CreateInstance<A>();
try
{
Type Typea = typeof(A);
foreach (PropertyInfo propertyInfo in Typea.GetProperties())
{
if (req.ContainsKey(propertyInfo.Name))
{
// Type t = ap.GetType();
string proName = propertyInfo.PropertyType.Name;
if (proName == "String")
{
propertyInfo.SetValue(a, req[propertyInfo.Name]);
}
else if (proName == "Int32")
{
propertyInfo.SetValue(a, Convert.ToInt32(req[propertyInfo.Name]));
}
else if (proName == "DateTime")
{
propertyInfo.SetValue(a, Convert.ToDateTime(req[propertyInfo.Name]));
}
else if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{ Type[] typeArray = propertyInfo.PropertyType.GetGenericArguments();
Type baseType = typeArray[];
if (baseType.Name== "Int32")
{
propertyInfo.SetValue(a, Convert.ToInt32(req[propertyInfo.Name]));
}
else if (baseType.Name == "DateTime")
{
propertyInfo.SetValue(a, Convert.ToDateTime(req[propertyInfo.Name]));
} }
else
{
//非int类型 and string ,datetime类型 不做处理
}
}
}
}
catch (Exception ex)
{
throw ex;
}
return a;
}
在写这个方法时,有两个注意点

二:可空类型,拿出来的Name都是一样的Nullable`
也就是 Nullable<System.DateTime> 与 Nullable<System.Int> 的属性类型名字时一样的

解决办法: 从可空泛型参数里获取真实类型,下面代码,是根据实际需求设计,不具有通用性。

当然还有很多办法可以自动赋值,例如参数做对象绑定、参数为Json字符串通过序列化、反序列化解决。各有优缺点,根据情况权衡吧。
推荐阅读:https://www.cnblogs.com/landeanfen/p/5337072.html
WebApi接口传参的更多相关文章
- WebApi接口传参不再困惑(4):传参详解(转载)
WebApi接口传参不再困惑(4):传参详解 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方 ...
- C# WebApi 接口传参详解
这篇文章主要介绍了C# WebApi 接口传参详解,本篇打算通过get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/datetime等).实体.数组等类型的参 ...
- WebApi 接口传参接参
阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的 ...
- C#进阶系列——WebApi接口传参不再困惑:传参详解(转载)
原文地址: http://www.cnblogs.com/landeanfen/p/5337072.html 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用 ...
- WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
- WebApi接口传参不再困惑:传参详解
原文出处: 懒得安分 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望 ...
- WebApi接口传参不再困惑(4):传参详解
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
- WebApi接口传参不再困惑:传参详解
http://www.cnblogs.com/landeanfen/p/5337072.html
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
随机推荐
- 我的idea突然没有SVN了是怎么回事
总结一下没有svn选项的几种情况: 情况1:IntelliJ IDEA打开带SVN信息的项目不显示SVN信息,项目右键SVN以及图标还有Changes都不显示解决方法 在VCS菜单中有个开关,叫Ena ...
- jxl操作excel写入数据不覆盖原有数据示例
public void readTO() { Workbook wb = null; WritableWorkbook wwb = null; try { ...
- maven学习三
做项目时使用maven构建项目已经是现在的流行做法了.那么maven的作用是什么呢?maven中的几个常用的命令都有什么用?下面我们来看一下. maven最大的作用就是用于对项目中jar包依赖的统一管 ...
- python实现netcat部分功能源代码
#!/opt/local/bin/python2.7 import sys import socket import getopt import threading import subprocess ...
- Struts2学习第四天——拦截器及文件上传
1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...
- windows安装mongodb及相关命令
- 安装 解压: mongodb-win32-x86_64-2008plus-ssl-3.6.4.7z 将文件夹改名为mongodb 移动文件到指定目录下,如: C:\python\soft ...
- lucene的suggest(搜索提示功能的实现)
1.首先引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-suggest --> <!-- ...
- 《mysql必知必会》学习_第17章_20180807_欢
第17章:组合查询 P114 select vend_id ,prod_id,prod_price from products where prod_price <=5 ; select ven ...
- PowerBuilder常用字符串函数
http://blog.sina.com.cn/s/blog_5995b53d0100a694.html Fill()功能建立一个由指定字符串填充的指定长度的字符串.语法Fill ( chars, n ...
- jquery中$().each() 和$.each()
// 形参1: 当前的下标 // 形参2: 当前的dom节点元素 $('#div1').find('div').each(function (i, item) { // this === item 当 ...