/// <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. 8. 冒泡法排序和快速排序(基于openCV)

    一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...

  2. Tomcat 内存与优化篇

    Tomcat 内存与优化一.Tomcat 运行环境介绍 1.Tomcat 本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机: 2.Java 程序启动时JVM都会分配一个初始内存 ...

  3. windows-JDK环境变量设置

    JAVA_HOME=C:\Program Files\Java\jdk1.6.0_43;CLASS_PATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;p ...

  4. Android 使用图标字体库

    首先,在assets资源文件下放入图标字体库. 我这儿采用的是fontawesome-webfont.ttf 然后, 在安卓中加载这个资源文件 Typeface fontFace = Typeface ...

  5. Eclipse闪退解决办法

    解决方式: 1.通过在命令行中输入“where java”,找到除jdk目录下的所有java相关程序,直接删掉(一般会在C:\WINDOWS\system32下) 2.内存不足,打开Eclipse目录 ...

  6. java学习——abstract 和 final

    当多个类中出现相同功能,但是功能主题不同,这时可以进行向上抽取.这时只抽取功能定义,而不抽取功能主体. 抽象:看不懂.1, 抽象方法一定定义在抽象类中.2, 抽象方法和抽象类都必须被abstract关 ...

  7. IOS UI篇—UILabel的文字顶部对齐

    UILabel的文字顶部对齐 NOV 20TH, 2011 默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中. 如下图所示(图片来自stackove ...

  8. SPOJ QTREE 系列解题报告

    题目一 : SPOJ 375 Query On a Tree http://www.spoj.com/problems/QTREE/ 给一个树,求a,b路径上最大边权,或者修改a,b边权为t. #in ...

  9. n个数的最大公约、最小公倍数

    #include <cstdio> #include <cstring> using namespace std; #define N 1010 //两个数的最大公约数和最小公 ...

  10. linux命令--virtualenv

    virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题. 一.安装virtualenv virtualenv实际上是一个pyth ...