AjaxRequest类的设计思路其实是模仿HttpContext设计,HttpContext能够从基础的http请求报文分析出以后处理将要用到的数据(response,request,session,cookie等等)数据,而AjaxRequest通过分析Ajax的Post请求的数据域 Data分析出各种以后会用到的数据。如下是该类的代码:
public class AjaxRequest 
    { 
        private Dictionary<int, string> m_DictionaryParamsData = new Dictionary<int, string>(); 
        private AjaxParameter m_AjaxParameter; 
        private int m_Count = 0; 
  
        #region 属性 
        /// <summary> 
        /// 是否是一个Ajax请求。 
        /// </summary> 
        public bool IsAjaxRequest { get; private set; } 
  
        /// <summary> 
        /// 请求的方法名字。 
        /// </summary> 
        public string MethodName { get; private set; } 
  
        /// <summary> 
        /// 参数数据。 
        /// </summary> 
        public AjaxParameter Parameters 
        { 
            get { return this.m_AjaxParameter; } 
        } 
        #endregion 
  
        #region 构造函数 
        private AjaxRequest(NameValueCollection nameValueCollection) 
        { 
            this.IsAjaxRequest = nameValueCollection["isAjaxRequest"] == "true"; 
            if (this.IsAjaxRequest) 
            { 
                this.MethodName = nameValueCollection["MethodName"]; 
  
                foreach (string value in nameValueCollection) 
                { 
                    string formKey = string.Format("param{0}", this.m_Count); 
                    if (nameValueCollection[formKey] != null) 
                    { 
                        this.m_DictionaryParamsData.Add(this.m_Count, nameValueCollection[formKey]); 
                        this.m_Count++; 
                    } 
                } 
                m_AjaxParameter = new AjaxParameter(this.m_DictionaryParamsData); 
            } 
        } 
  
        #endregion 
  
        #region 实例方法 
        public static AjaxRequest GetInstance(NameValueCollection nameValueCollection) 
        { 
            return new AjaxRequest(nameValueCollection); 
        } 
        #endregion 
  
        #region ToString 
        public override string ToString() 
        { 
            return this.MethodName; 
        } 
        #endregion 
    }

  通过分析AjaxRequest的属性IsAjaxRequest可判断是否为Ajax请求,若该请求为一个Ajax请求,那么创建一个AjaxApplication实例,在创建AjaxApplication实例的过程中会利用当前页面和AjaxRequest提供的数据进行实际方法的调用(反射),该类是执行Ajax方法的核心类,其中会判断是否读取的到的方法是一个有效的方法,并判断从JS中AjaxApplication传入的参数类型的有效性,目前只提供对以下13中参数提供支持,如下:
(String、Boolean、Int32、Int64、UInt32、UInt64、Single、Double、Decimal、DateTime、DateTimeOffset、TimeSpan、Guid)