C#反射——模仿ParameterInterceptor(ashx处理程序)
反射工具类请参见:https://www.cnblogs.com/threadj/p/10535796.html
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Collections; using System.Collections.Specialized; using System.Reflection; namespace ReligionServer.util { public class ParametersUtil { private static NameValueCollection collection = null; //从Request.Param中获取指定的类型字段的值, 并用这些值结合字段初始化一个Hashtable --> hashTable(String fieldName, String fieldName)fieldName来源于Request.Param中 public static Hashtable GetHashtableFormRequest(HttpContext context, Type type) { collection = context.Request.Params; Hashtable map = new Hashtable(); //FieldInfo[] fields = ReflectionUtil.GetFileldS(type); //在后来的修改之后, 返回List, 且包含当前类和除开Object的所有父类的属性 String value = ""; foreach (FieldInfo item in ReflectionUtil.GetFileldS(type)) { value = item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - 1); map.Add(value, collection.Get(value)); } //System.Diagnostics.Debug.WriteLine(context.Request.Params.Count); //ClearForOnlyValueMap(map);//是否有必要 return map; } /// <summary> /// 从HttpContext中初始化实体 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="context"></param> /// <param name="t"></param> /// <returns></returns> public static T GetInstanceFormRequest<T>(HttpContext context, T t) { String foreignKey = context.Request["ForeignKey"]; collection = context.Request.Params; String value = ""; foreach (FieldInfo item in ReflectionUtil.GetFileldS(t.GetType())) { if (item.Name.IndexOf("<") != -1) { value = item.Name.Substring(item.Name.IndexOf("<") + 1, item.Name.IndexOf(">") - 1); } else { value = item.Name; } item.SetValue(t, GetValueByType(item.FieldType, collection.Get(value))); } return t; } public static Object GetValueByType(Type type, String value) { if (type.Equals(typeof(DateTime))) { return DateUtil.ToDateTimeWithFormatf(value); } else if (type.Equals(typeof(MongoDB.Bson.BsonValue))) { return MongoDB.Bson.BsonValue.Create(value); } else if (type.Equals(typeof(Boolean))) { value = util.CommonUtil.IsEmpty(value) == true ? "false" : value;//如果上传参数为空, 那么默认初始化为false return Boolean.Parse(value); } else if (type.Equals(typeof(int))) { return Convert.ToInt32(value); } return value; } //将Hashtable中的空值去掉 private static void ClearForOnlyValueMap(Hashtable map) { foreach (String key in map) { if (null == map[key]) { map.Remove(key); } } } } }