/// <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. vs连接mysql出错解决方法

    vs连接mysql出错解决方法 先按以下的步骤配置一下: **- (1)打开VC6.0 工具栏Tools菜单下的Options选项.在Directories的标签页中右边的"Show dir ...

  2. AfxBeginThread的介绍/基本用法

    AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...

  3. MySQL学习笔记:MySQL: ERROR 1064(42000)

    ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL s ...

  4. winform窗体中查找控件

    private RichTextBox FindControl()        { RichTextBox ret = null;            try            {       ...

  5. Code Complete 读后总结和新的扩展阅读计划

    Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...

  6. ibatis复用SQL片段、引入片段 动态条件增加

    1:ibatis复用SQL片段.引入片段  使用[sql]和[include]标签: 通常情况下,你会这样写:xml 代码 <select id="selectItemCount&qu ...

  7. oracle 初探内存结构

    数据库的存储机构 分为 逻辑存储结构 和 物理存储结构 逻辑存储结构: 数据库.表空间.段.区.块         物理存储结构: 数据库.控制文件.数据文件.初始化参数文件.OS块等. 一个区只能在 ...

  8. ios 网络数据下载和JSON解析

    ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...

  9. Java的Date类与Calendar类

    一:Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Da ...

  10. JAVA操作properties文件

    va中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties ...