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学习系 ...
随机推荐
- selenium_unittest框架,TestCase引用
新手,纯属个人理解,有问题可以给出建议奥~谢谢. 如以下代码,每一个test的类都是一个测试方法而测试方法必须由test_xxx开头命名,非test开头可能会执行不到,执行顺序如test1,test2 ...
- C++ MFC棋牌类小游戏day3
今天开始设计小人棋子. 画法跟画虎一样,唯一不一样的是小人在刚开始会有重叠的情况,所以画起来可能比虎的棋子能够难一点. 我打算用Location结构体中的num来标记每个棋盘坐标存在棋子的个数,isH ...
- UnionFind问题总结
UnionFind就是acm中常用的并查集... 并查集常用操作 另外补充一下STL常用操作 相关问题: 547. Friend Circles 纯裸题噢... class Solution { pu ...
- CUDA[3] Samples for accessing shared/global memory
memory model: programming model: Source: Udacity Class CS344
- elasticsearch之入门hello(java)一
1.书写pom.xml文件 <dependencies> <dependency> <groupId>org.elasticsearch</groupId&g ...
- break语句和continue语句
1. break 语句 break语句只能用在switch语句中,其作用是跳出switch语句或跳出本层循环. 2. continue 语句 continue语句只能用在循环体中,用于结束本次循环,即 ...
- samba服务配置(二)
需求: 某公司销售部门提出一个文件共享需求,要求部门共享目录有三个,第一个共享目录所有销售部门人员都具有可读可写权限: 第二个共享目录所有销售人员只读权限,经理级别的销售人员具有可读可写权限:第三个共 ...
- RabbitMQ服务端配置详解
RabbitMQ支持三种配置方式: 1) 读取环境变量中配置, 这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量 可配置如 ...
- 程序性能调优工具之gprob
1 简介改进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的.GNU 编译器工具包所提供了一种剖析工具 GNU profiler(gpro ...
- shiro测试常见错误
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.sh ...