|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Specialized;
using System.Reflection;
namespace asp.net.Handler
{
public class BaseHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HttpRequest request = context.Request;//客户端请求对象
string requestType = request.RequestType;//客户端请求的类型
NameValueCollection nvc = requestType == "get" ? request.QueryString : request.Form;
string op = nvc["op"];
Type t = this.GetType();
MethodInfo mi = t.GetMethod(op, BindingFlags.DeclaredOnly |
BindingFlags.IgnoreCase |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance
);
//通过反射 获取方法所有的参数列表 在请求数据中检索值
ParameterInfo[] paras = mi.GetParameters();
List<object> paraValueList = new List<object>();//存储检索方法参数名字的参数具体的值
foreach (ParameterInfo para in paras)
{
Type paraType = para.ParameterType;//获取该参数的类型
string paraName = para.Name;//方法中的参数的名字,比如ID,Pwd
string requestValue = nvc[paraName];//根据方法中参数的真实名字去找到客户端传过来的值,
if (requestValue != null)//取到值后
{
//将 string类型的请求数据 转换成 方法的参数类型
object paraTypeValue = Convert.ChangeType(requestValue, paraType);
paraValueList.Add(paraTypeValue);
}
}
object[] paramters = paraValueList.ToArray();
mi.Invoke(this, paramters);//传递参数所对应的的值调用该方法
}
}
}
标注颜色的两个地方,那个this代表本类,但是它能代表继承它的那些子类吗?
|
|