日期:2014-05-17  浏览次数:20501 次

难题求解答:mvc项目,HttpHandler中,拦载了一个请求,反射执行一对象方法,如何绑定参数?
我在HttpHandler中,拦载了一个请求,并通过请求送过来的url,分解出对象,方法,参数三项。
通过反射调用对象的方法,并把参数绑定进去执行,然后返回结果。
现在的问题是,参数怎么绑定。方法的参数有可能是int,string,object...
mvc中是自带有ModelBinder这样的机制来做数据绑定的,我现在就是想怎么把这套机制拿过来用。
只是他反射的是控制器的方法,参数,而我是要反射我定义对象的方法,参数。
有没有高人能给我指点一下。不胜感激。
附代码片段:

public class AjaxHttpHandler : IHttpHandler 
{
  public AjaxHttpHandler() { }
  public void ProcessRequest(HttpContext context) 
  {
    //截掉路径中第一个"/"字符,截掉尾的".ajax",通过"/"分隔,得到对象的名称及方法
    var strObjact = context.Request.Path.Substring(1, context.Request.Path.Length-6).Split('/');
    //使用无参数构造函数创建对象
    var asm = System.Reflection.Assembly.GetExecutingAssembly();
    Object obj = asm.CreateInstance("sqerp.BusinessModels." + strObjact[0], false);

    Type t = obj.GetType();
    var param = //就是这里了,怎么绑定这个参数...
    var result = t.InvokeMember(strObjact[1], System.Reflection.BindingFlags.InvokeMethod, null, obj, param);
  }
}
mvc ModelBinder

------解决方案--------------------
微软做的事情,跟你想象的并不一样,这个推论过程他不是在运行期做的

他其实是在编译期就在做这个事情。在编译期他就会根据路由表CodeDom或emit 生成一个你看不见的对象,所有分解参数,转换类型,传递参数都在这个你看不见的对象里面。