WebApi接口传参
2018-08-17 09:30:58来源:博客园 阅读 ()
目前接口统一使用 [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[0]; 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; }
在写这个方法时,有两个注意点
一:获取属性类型,官网 https://docs.microsoft.com/en-us/dotnet/api/system.reflection.propertyinfo.propertytype?redirectedfrom=MSDN&view=netframework-4.7.2#System_Reflection_PropertyInfo_PropertyType
二:可空类型,拿出来的Name都是一样的Nullable`
也就是 Nullable<System.DateTime> 与 Nullable<System.Int> 的属性类型名字时一样的
解决办法: 从可空泛型参数里获取真实类型,下面代码,是根据实际需求设计,不具有通用性。
当然还有很多办法可以自动赋值,例如参数做对象绑定、参数为Json字符串通过序列化、反序列化解决。各有优缺点,根据情况权衡吧。
推荐阅读:https://www.cnblogs.com/landeanfen/p/5337072.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:ABP之模块系统
- 浅谈ASP.Net Core WebApi几种版本控制对比 2019-12-10
- 解析ASP.NET Page函数调用顺序 2019-08-23
- Swagger实例分享(VS+WebApi+Swashbuckle) 2019-07-23
- WebApi生成文档 2019-07-23
- webapi 集成swagger 2019-05-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash