/// <summary>
/// 获取请求参数字段
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T GetRequestParas<T>()
{ T t = (T)Activator.CreateInstance(typeof(T));
if (HttpContext.Current == null)
{
return t;
}
if (HttpContext.Current.Request.Form.Count < 0 && HttpContext.Current.Request.QueryString.Count < 0)
{
return t;
}
//获取所有为Public的字段和实例成员(如果有的话)
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
//遍历每一个字段
foreach (PropertyInfo p in props)
{
var value = HttpContext.Current.Request[p.Name.ToLower()]; if (value != null)
{ var okvalue = ConvertTo(value, p.PropertyType);
if (okvalue == null)
{
okvalue = ConverUtil.toObject(value);
} p.SetValue(t, okvalue, null);
} }
return t;
} /// <summary>
/// 转换方法
/// </summary>
/// <param name="convertibleValue">待转换内容</param>
/// <param name="t">新的类型</param>
/// <returns>转换后的内容,如果转换不成功,返回null</returns>
public static object ConvertTo( IConvertible convertibleValue,Type t)
{
if (null == convertibleValue)
{
return null;
}
if (!t.IsGenericType)
{
return Convert.ChangeType(convertibleValue, t);
}
else
{
Type genericTypeDefinition = t.GetGenericTypeDefinition();
if (genericTypeDefinition == typeof(Nullable<>))
{
return ConverValue(convertibleValue.toString(), Nullable.GetUnderlyingType(t));
// Convert.ChangeType(convertibleValue, Nullable.GetUnderlyingType(t));
}
}
return null;
} /// <summary>
/// 执行TryParse方法进行转换
/// </summary>
/// <param name="value">待转换内容</param>
/// <param name="type">新的类型</param>
/// <returns>转换后的内容,如果转换不成功,返回null</returns>
public static object ConverValue(string value, Type type)
{
Object testValue = Activator.CreateInstance(type); object[] invokeArgs = new object[] { value, testValue };
Type[] types = new Type[2];
types[0] = typeof(string);
types[1] = type.MakeByRefType();
var isok = RunMethod("TryParse", types, invokeArgs, type);
bool outok = false;
bool.TryParse(isok.toString(), out outok);
if (outok)
{
return invokeArgs[1];
}
return null;
} /// <summary>
/// 执行反射的方法
/// </summary>
/// <param name="methodName">方法名</param>
/// <param name="types">参数类型</param>
/// <param name="invokeArgs">参数值</param>
/// <param name="invokeArgs">方法所在类的类型</param>
/// <returns></returns>
public static object RunMethod(string methodName, Type[] types, object[] invokeArgs, Type type)
{
Object Value = Activator.CreateInstance(type); MethodInfo mi = type.GetMethod(methodName, types);
if (mi == null)
{
return null;
}
Object returnValue = mi.Invoke(Value, invokeArgs);
return returnValue;
}

  写了大半天才写好,累死了。

方法的作用是自动匹配HTTP请求中对应实体参数名的数据,就是这样,其它的方法也可以单独用的,不过单独用的话最好写成扩展方法,直接点出来。

自动匹配HTTP请求中对应实体参数名的数据(性能不是最优)的更多相关文章

  1. springboot的restful风格获取请求中携带的参数

    http://localhost:8080/emp/1 有以上请求,我们controller要怎么获取请求中传递的参数1呢? 通过PathVariable注解,如下: @DeleteMapping(& ...

  2. js http 请求 多个相同参数名传值

    最近在用js和api做对接的时候需要传参数类似于 rights=a1&rights=a2 因为有相同的参数名,试过很多方法都被覆盖了. 最后终于发现可以通过rights=[a1,a2]的方式, ...

  3. Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" on ...

  4. JMeter怎么在get URL请求、POST请求中添加动态参数用于服务器段安全验证

    从前一个页面(含有服务器段返回给客户端的参数,用于在下一次请求时验证)中添加后置处理器中的Regular Expression Extractor,使用正则表达式对参数进行提取. 在用到这些变量时可以 ...

  5. postman 模拟请求中添加 header,post请求中传json参数

    1. GET 请求 2.Post 请求 (请求参数为Json,header中带有参数) 问题延伸 GET请求不能够 添加 Body 吗?[答案]

  6. linux curl http get 请求中带有中文参数或者特殊字符处理

    在使用c++去请求http服务的时候,使用的是著名的curl工具提供的类库 libcurl,但是在使用的过程中发现,如果请求的参数值带了空格或者是参数是中文,会导致响应的回调函数没有被执行,虽然cur ...

  7. LoadRunner---http请求中对中文参数的处理

    Loadrunner 做保险承保业务测试 1. 保险正常业务流程:保费计算--->保存--->申请核保--->核保--->缴费(出保单) 问题一描述 保费计算接口中,需要把车牌 ...

  8. Koa系框架(egg/cabloy)如何获取微信支付回调请求中的xml参数

    背景 在Koa系框架(如EggJS)中进行微信支付开发时,遇到一个问题:微信支付平台会发送一个回调请求,通知支付订单的处理结果.该请求传入的参数是xml格式,而Koa中间件koa-bodyparser ...

  9. ajax请求中包含中文参数

    对需要传递的中文参数先进行两次转码: 1.js文件中使用encodeURI()方法. var url = "Validate.jsp?id=" + encodeURI(encode ...

随机推荐

  1. poi读写Excel文件

    jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好 poi功能比jxl强大但是比较吃内存,支持计算公式        关于jxl具体可以参考    http:// ...

  2. 改进的简单Tooltips显示

    使用js简单改进了Tooltips的显示效果,可进一步使用CSS对改进的Tooltips进行美化. 前台布局代码: <asp:Panel ID="Panel1" runat= ...

  3. hbase权威指南学习笔记--架构--存储

    HBase主要处理两种文件:预写日志(Write-Ahead Log,WAL),实际的数据文件. 一个基本的流程是客户端首先联系ZooKeeper子集群查找行健数据所在的region服务器名.(通过Z ...

  4. Android 定义重名权限问题

    一直以来对android的权限机制就有一个疑问,因为在使用权限时,实际上只需要permission的name这一个标签,而在定义权限时,android是不会检查是否重名的,那么在两个应用定义了重名权限 ...

  5. C++服务器设计(七):聊天系统服务端实现

    在之前的章节中,我们对服务端系统的设计实现原理进行了剖析,在这一章中,我们将对服务端框架进行实际运用,实现一款运行于内网环境的聊天系统.该聊天系统由客户端与服务器两部分组成,同时服务端通过数据库维护用 ...

  6. 写一个Windows上的守护进程(6)Windows服务

    写一个Windows上的守护进程(6)Windows服务 守护进程因为要开机启动,还要高权限,所以我就把它做成Windows服务了. 关于Windows服务的官方文档,大家可以看https://msd ...

  7. CDZSC_2015寒假新人(2)——数学 C

    C - C Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  8. Mysql表大小数据大小索引大小查询

    SELECT CONCAT(ROUND((INDEX_LENGTH+DATA_LENGTH)/1024/1024, 2), 'MB') AS '总大小',CONCAT(ROUND(DATA_LENGT ...

  9. Javascript经典实例 - 字符串

    1] 'this is a string'这是字符串直接量,new String('this is a string')这是字符串对象,字符串对象可以用字符串对象所带的属性和方法,直接量在“表面上”也 ...

  10. 远程复制 scp命令

    定义 本机为A,用户名为usera,登录远程主机B的为userb,IP为remote_ip 1. 从B 拷贝文件到A机器  用下面的命令 scp userb@remote_ip:remote_path ...